摘要:
在如今大数据时代,为了提升研发效率各个公司基本都是用sql进行数据开发,那么一条sql在提交后是怎样运行在spark中呢?回答以上问题需要先了解sql执行的主要流程,以及这个流程中每一步骤具体都是做什么的。
主要流程
语法树解析-逻辑分析-语法优化-计划执行
详细拆解如下步骤:
1、Unresolved Logical Plan阶段:此阶段是语法树的解析生成计划,关注查询的方式(什么样的查询,查询数据源在哪里)
2、AnalyzedLogicalPlan阶段:此阶段是通过Hive中元数据对Unresolved Logical Plan中涉及到的数据源Schema信息、地址进行校验,在进行优化(其中涉及到AQE:在shufflemap阶段完毕后 进行后续逻辑计划 物理执行优化的调整,还会涉及启发式规则:谓词下推、列剪裁和常量替换)
3、Optimized plan阶段:此阶段在Transform后的AnalyzedLogicalPlan后,根据规则进行转换,选取近似最优模型生成Physic plan (其中经历了优化Spark Plan(join策略)和生成Physical Plan(EnsureRequirements 添加操作符 排序 shuffle)。
4、Physic plan阶段:此阶段是进行转换RDD,生成DAG调度图。
注意:在生成物理逻辑计划(Physic Plan)后,此时的物理逻辑计划存在多个。Spark内部存在代价模型(CastModule),会对候选计划比对,选取消耗最小的Physic Plan。