介绍Stage转为Task,提交给Executor运行的过程。
Task是执行计算的单元,Executor调用Task对象的runTask方法完成计算。查看定义 Task有两个子类,并且和Stage的类型存在对应关系,即Stage会转为对应的Task,如下
Task对应的StageShuffleMapTaskShuffleMapStageResultTaskResultStage最后,UML如下
上一篇博客Spark DAG之SubmitStage介绍了submitStage方法,当提交的Stage没有父Stage或父Stage已执行完毕时,调用submitMissingTasks方法,查看该方法 这是submitMissingTasks的开始部分,作用如图中注释。
接着查看submitMissingTasks方法,根据cache信息和RDD的preferredLocations获取preferred location
把Stage的RDD和ShuffleDependency(或func)广播到Executor Stage类型不同,广播内容不同
Stage广播内容1广播内容2ShuffleMapStagerdd: RDDshuffleDep: ShuffleDependencyResultStagerdd: RDDfunc: (TaskContext, Iterator[_]) => _根据Stage类型,生成对应的Task,taskBinary变量是上面刚介绍的,广播到Executor节点的
上图中可以看到另一个重要信息,Partition和Task数的对应关系,RDD的一个Partition对应生成一个Task。
最后一步,发送Task到Executor 关于TaskScheduler提交Task更多的内容,参考我的博客Spark 任务调度之Driver send Task。 至此,submitMissingTasks方法执行完毕,Task也被发送Executor。
介绍Task类,及submitMissingTasks方法中Stage转为Task并提交的细节,主要步骤如下
获取preferred location。broadcast taskBinary。Stage转为Task。send Task。