我和spark有个约会(1)-Spark中的stage的划分原理

我和spark有个约会(1)了解DAGScheduler 阶段对stage的划分原理

spark宽窄依赖

sparkNW依赖

  • narrow dependencies:child rdd只依赖于parentrdd[s]的部分固定的partition

  • wide dependencies:child rdd 每个partition 都依赖于parent rdd[s] 的全部partition(也称之为shuffle dependencies 会触发shuffle)

从图上可以看出宽依赖和窄依赖和你使用rdd的算子有很强的关系,所以在使用的时候 辨别不同算子会产生宽依赖还是窄依赖很重要。

一个dag scheduler 根据宽窄依赖将一个spark job划分为不同的stage。而宽依赖就是划分的标准,遇到一个宽依赖就会从中一切为二,如上图一样划分为两个stage。

stage 分为两种,resultstage和shufflemapstage两种,sparkjob 最后产生的stage为resultstage,中间阶段产生的stage为shufflemapstage。
task 分类:在resultstage阶段的都是resulttask,在shufflemapstage称为ShuffleMapTask。

一个完整的stage的创建过程

这里写图片描述

对 G 调用 creatResultStage,先创建parent rdd ,stage1和stage2 然后在创建stage3。具体分析如下:


api:调用关系图

creatResultStage               getMissingParentStages
           |                          |
           |                          |
           v                          | 
getOrCreateParentStages <-------------|--------|
          |  获取所有的shuffle依赖      |        |
          v                           |        |
getOrCreateShuffleMapStage<-----------|        |
         |  当前以及所有存在的上游stage都要创建     |                                         
         |                                     |
         v                                     | 
createShuffleMapStage--------------------------|尝试创建上游stage,然后创建自己
  • 对G调用creatResultStage通过getOrCreateParentStages获取所有的parentsList[stage],作为所有直接父亲stage,创建本身的 ResultStage。 getOrCreateParentStages会先创建上游 stage1 stage2,然后创建自己的 stage3

  • getOrCreateParentStages会调用getShuffleDependencies获得rdd_G所有直接宽依赖 HashSet(S_F,S_A),然后遍历集合对S_F和S_A调用getOrCreateShuffleMapStage

  • 对S_A调用 getOrCreateShuffleMapStage, shuffleIdToMapStage 中获取判断为None, 对 rdd_A 调用getMissingAncestorShuffleDependencies返回为空,对 S_A 调用 createShuffleMapStage,由于rdd_A 没有parent stage直接就创建stage1返回。

  • s_f重复同样的操作。

  • 把 List(stage1,stage2) 作为 stage3 的 parents stages 创建 stage3

stageparent
s_astage1list()
s_fstage2list()
s_gstage3list(stage1,stage2)

next 我和spark有个约会(1)-Spark的shuflle过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值