Spark DAG之SubmitStage

概要

介绍提交Stage的流程,继续沿用Spark DAG之划分Stage中的例子。

前提

上篇博客Spark DAG之划分Stage介绍了划分Stage的流程,举的例子最后生成的Stage如下
这里写图片描述
划分Stage阶段完成后,DAGScheduler的handleJobSubmitted方法提交Stage,如下
这里写图片描述
本篇博客重点就是讲解上图中的两个方法,其中的finalStage变量以第一幅图为例。

submitStage

查看submitStage方法
这里写图片描述
submitStage方法的主要作用如图中注释,其涉及到三个重要集合

waitingStages等待运行的Stage
runningStages正在运行的Stage
failedStages运行失败的Stage

限于篇幅,关于submitStage中的其他方法不再详解。最后submitStage中的流程大致如下
这里写图片描述

上面流程图中父Stage是否执行完毕是如何判断的?
  • 这里写图片描述
    如上图,调用ShuffleMapStage的isAvailable方法判断。每当执行完一个Task会对变量_numAvailableOutputs加1,直至所有Task执行完,_numAvailableOutputs等于分区数。

Spark DAG之划分Stage中切分的Stage为例,执行submitStage(finalStage),此时finalStage的值为ResultStage 4(参考第一幅图),submitStage方法执行完状态如下

集合包含的Stage状态
runningStagesShuffleMapStage 0、ShuffleMapStage 2转为ShuffleMapTask,发送给Executor执行
waitingStagesShuffleMapStage 1、ShuffleMapStage 3、ResultStage 4等待
failedStages

submitWaitingStages

submitStage方法执行完毕后调用submitWaitingStages方法,查看该方法
这里写图片描述
该方法非常简单,职责如下

  1. 拷贝集合waitingStages到waitingStagesCopy,清空waitingStages。
  2. 遍历waitingStagesCopy中的Stage,调用submitStage方法。

submitStage的流程上面刚介绍过,submitWaitingStages的流程如下
这里写图片描述

submitWaitingStages的作用
waitingStagesShuffleMapStage 1、ShuffleMapStage 3、ResultStage 4
runningStagesShuffleMapStage 0、ShuffleMapStage 2
  • submitWaitingStages方法中调用submitStage依次提交waitingStages的Stage。我们假设执行submitWaitingStages前,ShuffleMapStage 0已执行完毕,ShuffleMapStage 2没有(其他情况也简单,不一一列举),那么submitWaitingStages方法执行后
waitingStagesShuffleMapStage 3、ResultStage 4
runningStagesShuffleMapStage 1、ShuffleMapStage 2
CompletedShuffleMapStage 0

可以看出调用一次submitWaitingStages方法不能完成所有Stage的提交,需要多次的调用,就是说,提交一个Stage必须其父Stage全部运算完毕。接下来看下哪些事件会触发submitWaitingStages。

再次触发submitWaitingStages方法的事件
  • Spark DAG之SubmitJob中介绍了DAGSchedulerEvent,具体的事件类型如下,DAGScheduler对所有事件的处理都会再调用一次submitWaitingStages
JobSubmittedMapStageSubmitted
StageCancelledJobCancelled
JobGroupCancelledAllJobsCancelled
BeginEventGettingResultEvent
CompletionEventExecutorAdded
ExecutorLostTaskSetFailed
ResubmitFailedStages

总结

围绕submitStagesubmitWaitingStages方法,通过流程图,介绍如何提交Stage,大致如下

  1. 调用submitStage提交Stage。
  2. DAGScheduler处理定义的各种事件都会调用一次submitWaitingStages方法,submitWaitingStages继续调用submitStage提交处于waiting状态的Stage,直至所有Stage执行完毕。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值