spark 源码简单分析
sparksql 作为spark1.0所支持的lib库中唯一新增加的lib库,可见其重要地位。
分析内容:
- spark sql执行流程;
- hive on spark 和 hive on hadoop 的比较;
-
spark sql执行流程分析
首先我们来分析下sql的通用执行过程:
比如说: select n1,n2,n3 from tableN where n1 = ?
其中n1,n2,n3 是需要返回的结果,tableN 是数据源,n1=? 是查询条件。
sql 语句分析执行过程的步骤:
- 语法解析;
- 操作bind;
- 优化策略;
- 执行。
语法解析完成会形成一颗语法树,树中的每个节点便是执行的规则,整个树就是执行策略。
而接下来要解读的是sql on spark,无可厚非,也是要完成解析,优化,执行三大过程。
- sqlParser 生成逻辑计划树;
- 解析器和优化器在多个rule的基础上作用于逻辑计划树上;
- 由优化后的逻辑计划生成物理计划;
- 生成sparkRDD;
- spark执行RDD。
一般sparksql这种新特性会引入sqlContext和schemaRDD。 -
hive on spark 和 hive on hadoop
hiveQL 执行过程:
- 将sql解析为语法树;
- 语义分析;
- 生成逻辑计划;
- 生成查询计划;
- 优化器。
- 生成mapreduce的job。
在spark中提供了hiveContext接口,而hiveContext继承自sqlContext。
而hive中涉及到两种数据:
- schema data 数据库的定义和表结构,存储在metastore中;
- Row data 分析的文件本身。持续更新和修改中…