首先推荐一本书关于sparksql书籍 《Spark SQL 内核剖析》朱峰 张绍全 黄明 著。
特意咨询了databricks开源spark主要负责人smilegator,推荐上面这本书。非常值得去阅读。
直接进入主题:
一:Spark SQL执行全过程,一张图写清楚整个流程。
sparksql语句在集群主要经过两大过程
1,逻辑计划(LogicalPlan),理解为树型数据结构,逻辑算子树
2,物理计划(PhysicalPlan),理解为物理算子树
那么一条sql又具体每个过程经历如下子过程:
逻辑计划(LogicalPlan):
a,未解析的逻辑算子树(Unresolved LogicalPlan),仅仅是数据结构,不包含任何数据信息
b,解析后逻辑算子树(Analyzed LogicalPlan),节点中绑定各种信息
c,优化后逻辑算子树(Optimized LogicalPlan),应用各种优化规则对一些低效的逻辑计划进行转换
物理计划(PhysicalPlan):
a,根据逻辑算子树,生成物理算子树的列表(Iterator[PhysicalPlan]),同样逻辑算子树可能对应多个物理算子树。
b,从列表中按照一定策略选取最优的物理算子树(SparkPlan)
c,对选取的物理算子树做提交前的准备工作,例如确保分区操作正确,物理算子节点重用,执行代码生成等。经过准备后的物理算子(Prepared SparkPlan)
最终物理算子树生成的RDD执行action操作,即可提交执行。
二:简单案例分析
"select sum(chineseScore) from (select x.id,x.chinese+20+30 as chineseScore, x.math rom studentTalbe x inner join scoreTalbe y on x.id=y.sid)z where z.chineseScore <100"
这条sql具体在saprksql中经历了什么呢,两张图张图写清楚一切
逻辑计划(LogicalPlan)如下:
物理计划(PhysicalPlan)如下:
三:怎么阅读spark sql源码
其实梳理好整个spark sql流程,不难发现其实核心是catalyst(优化器系统)就是根据每个流程中每个阶段去阅读,应该是高效合理的。
antrr4
parser
analyzer
optimizer
sparkplan
以上为主线阅读。
下篇将从parser开始!