[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架构:
Hive AST:抽象语法树。