Spark SQL基础
Hive
Hive会将SQL语句转成MapReduce作业,本身不执行SQL语句。 基本执行原理如下图:
Shark
Hive在Hadoop生态圈上运行的,于是出现了在Spark生态圈的Shark。
- 基本上和
Hive的解析过程、逻辑执行等相同 - 将
mapreduce作业换成了Spark作业 - 将
HiveQL解析换成了Spark上的RDD操作
- 存在的两个主要问题:
- spark是线程并行,mapreduce是进程级并行
- spark在兼容Hive的基础上存在线程安全性问题
Spark SQL 产生原因
关系数据库在大数据时代下不再满足需求:
- 用户要从不同的数据源操作不同的数据,包含结构化和非结构化
- 用户需要执行高级分析,比如机器学习和图形处理等
- 大数据时代经常需要融合关系查询和复杂分析算法
Spark SQL解决的两大问题:
- 提供
DF API,对内部和外部的各种数据进行各种关系操作 - 支持大量的数据源和数据分析算法,可以进行融合
架构
- Spark SQL在Hive 兼容层面仅仅是依赖HiveQL解析、Hive元数据
- 执行计划生成和优化是由Catalyst(函数式关系查询优化框架)负责
Spark SQL中增加了数据框DataFrame,数据的来源可以是RDD,也可以是Hive、HDFS、Cassandra等外部数据源,还可以是JSON格式的数据。 支持的语言是:
- java
- python
- Scala


