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