提交sql后执行过程

文章详细阐述了SQL在Spark中执行的过程,从UnresolvedLogicalPlan到Executor执行的每个阶段,包括语法树解析、逻辑分析、优化和物理计划生成。在生成PhysicalPlan时,Spark使用代价模型选择最佳的join策略。DAG图的生成、Stage划分和Task调度确保了数据处理的高效执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要:

在如今大数据时代,为了提升研发效率各个公司基本都是用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。

5、DAG图生成:SparkPlan(物理计划)根据操作类型转换为RDD。

6、Stage划分:DAGScheduler会对DAG图拆分成不同Stage,拆分规则为是否Shuffle。

7、Task调度:Executor对job最小粒度task调度,分配Excutor。

8、Executor执行:执行计划的最后步骤,以Task粒度来执行DAG图。

提问:

大体的流程讲解完后,大家可以思考一个问题:在生成Physic plan 时,是如何选择合适的join策略的呢?欢迎评论区留言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值