[Hadoop] Spark SQL

Spark SQL

Spark SQL is Apache Spark's module for working with structured data.

由于Hive太慢而产生的一系列SQL on Hadoop框架:

  • Hive:优点上手快,缺点运行速度太慢
  • Impala
  • Presto:国内有京东在使用
  • Shark:把hive跑在spark之上
  • Drill
  • HAWQ
  • Phoenix:构建在hbase上的一个SQL引擎

由于这些框架还是没能完美解决问题,所以社区里就产生了两条路线:Spark SQL 和Hive on Spark。这两个框架当中,Hive on Spark对SQL支持的东西要更多一些,Hive能支持的东西Spark不一定支持。但是目前生产上不推荐使用Hive on Spark,这个框架目前的成熟度还不高。

  • Spark SQL
  • Hive on Spark:即将hive底层的执行引擎改成Spark。它支持三个执行引擎:MapReduce,Tez,Spark。

特性:

  • Integrated:集成性。与Spark应用程序无缝对接。
  • Uniform Data Access:统一的数据访问,数据进来统一注册成临时表,或者直接使用API。Spark API:SQL、DataFrame/Dataset。
  • Hive Integration:与Hive的集成性。使用Spark SQL不一定要有Hive,只要有Hive的metastores就可以。
  • Standard Connectivity:标准的连接。JDBC/ODBC连接。比如启动Hive的ThriftServer2,Spark就可以通过JDBC/ODBC来连接Hive了。

Spark SQL is not about SQL,Spark SQL is about more than SQL。

Spark SQL演变历程:

  • 1.0.0 版本:Spark SQL
  • 1.3.0 版本:DataFrames and SQL
  • 2.0.0 版本:DataFrames, Datasets and SQL。

扩展:由于Spark SQL可以处理结构化的数据,我们就可以使用Spark SQL这个模块来做ETL操作这个地方需要借助DataSource API。其中DataSource API有V1和V2版本,V2版本是在Spark2.3版本之后出来的。

Spark SQL架构:

[Hadoop] Spark SQL

 

[Hadoop] Spark SQL

Hive AST:抽象语法树。