主页 > 新闻资讯 > Spark Stage划分依据:Spark中的Stage调度算法

Spark Stage划分依据:Spark中的Stage调度算法

作者:张老师 浏览次数: 2020-02-24 18:43
在Spark框架当中,基于有向无环图(DAG),实现了计算性能上的进一步提升,而DAG流程的调度,相对于Hadoop的MapReduce来说,要复杂得多,需要根据RDD之间的依赖关系来划分Stage。今天,我们就来聊聊Spark Stage划分依据,Spark中的Stage调度算法。

首先,需要明确的关键点是Spark Stage划分依据主要是基于Shuffle。

Spark Stage划分依据

Shuffle是产生宽依赖RDD的算子,例如reduceByKey、reparttition、sortByKey等算子。同一个Stage内的所有Transformation算子所操作的RDD都是具有相同的Partition数量的。

Stage划分基于数据依赖关系的,一般分为两类:宽依赖(Shuffle Dependency)与窄依赖(Narrow Dependency)。

宽依赖,父RDD的一个分区会被子RDD的多个分区使用。

窄依赖,父RDD的分区最多只会被子RDD的一个分区使用。

区分宽窄依赖,我们主要从父RDD的Partition流向来看:流向单个RDD就是窄依赖,流向多个RDD就是宽依赖。

Spark Stage划分,就是从最后一个RDD往前推算,遇到窄依赖(NarrowDependency)就将其加入该Stage,当遇到宽依赖(ShuffleDependency)则断开。每个Stage里task的数量由Stage最后一个RDD中的分区数决定。如果Stage要生成Result,则该Stage里的Task都是ResultTask,否则是ShuffleMapTask。

ShuffleMapTask的计算结果需要shuffle到下一个Stage,其本质上相当于MapReduce中的mapper。Result Task则相当于MapReduce中的reducer。因此整个计算过程会根据数据依赖关系自后向前建立,遇到宽依赖则形成新的Stage。

Stage的调度是由DAG Scheduler完成的。由RDD的有向无环图DAG切分出了Stage的有向无环图DAG。Stage以最后执行的Stage为根进行广度优先遍历,遍历到最开始执行的Stage执行,如果提交的Stage仍有未完成的父Stage,则Stage需要等待其父Stage执行完才能执行。

关于Spark Stage划分依据,以上就是简单的介绍了。Spark的作业运行,主要遵循DAG有向无环图,而Spark Stage划分是关键节点之一,搞懂这部分概念,对于理解Spark计算引擎也有帮助。成都加米谷大数据,大数据技术分享,大数据培训班每月开班中,详情可联系客服了解!
热点排行
推荐文章
立即申请>>