首页 理论教育 DAG调度器的阶段划分原理

DAG调度器的阶段划分原理

时间:2023-06-29 理论教育 版权反馈
【摘要】:DAG将调度提交给DAGScheduler,DAGScheduler调度时会根据是否需要经过Shuffle过程将Job划分为多个Stage。为了方便理解DAGScheduler划分Stage的原理,下面来回顾一下2.2节中的一个典型的DAG划分Stage示意图,如图4-9所示。图4-9 DAG划分Stage及Stage并行计算示意图其中,实线圆角方框标识的是RDD,方框中的矩形块为RDD的分区。Stage 1和Stage 2是相互独立的,可以并发执行。

DAG调度器的阶段划分原理

Spark在分布式环境下将数据分区,然后将作业转化为DAG,并分阶段进行DAG的调度和任务的分布式并行处理。DAG将调度提交给DAGScheduler,DAGScheduler调度时会根据是否需要经过Shuffle(具体的Shuffle运行机制参考第7章)过程将Job划分为多个Stage。

为了方便理解DAGScheduler划分Stage的原理,下面来回顾一下2.2节中的一个典型的DAG划分Stage示意图,如图4-9所示。

978-7-111-55442-4-Chapter04-28.jpg

图4-9 DAG划分Stage及Stage并行计算示意图

其中,实线圆角方框标识的是RDD,方框中的矩形块为RDD的分区。(www.xing528.com)

在图4-9中,RDD A到RDD B之间,以及RDD F到RDD G之间的数据需要经过Shuf-fle过程,因此RDD A和RDD F分别是Stage 1跟Stage 3和Stage 2跟Stage 3的划分点。而RDD B到RDD G之间,以及RDD C到RDD D到RDD F和RDD E到RDD F之间的数据不需要经过Shuffle过程,因此,RDD G和RDD B的依赖是窄依赖,RDD B和RDD G划分到同一个Stage 3,RDD F和RDD D加RDD E的依赖,以及RDD D和RDD C的依赖是窄依赖,RDD C、RDD D、RDD E和RDD F划分到同一个Stage 2。Stage 1和Stage 2是相互独立的,可以并发执行。而由于Stage 3依赖Stage 1和Stage 2的计算结果,所以Stage 3最后执行计算。

根据以上RDD依赖关系的描述,在图4-9中的操作算子中,map和union是窄依赖的操作,因为子RDD(如D)的分区只依赖父RDD(如C)的一个分区,其他常见的窄依赖的操作还有filter、flatMap和join(每个分区和已知的分区join)等。groupByKey和join是宽依赖操作,其他常见的宽依赖操作还有reduceByKey等。

由此可见,在DAGScheduler的调度过程中,Stage阶段的划分是根据是否有Shuffle过程,也就是当存在ShuffleDependency的宽依赖时,需要进行Shuffle,此时才会将作业(Job)划分成多个Stage。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈