整体流程图:
1、Driver程序的代码运行到action操作,触发了SparkContext的runJob方法。
2、SparkContext调用DAGScheduler的runJob函数。
3、DAGScheduler把Job划分stage,然后把stage转化为相应的Tasks,把Tasks交给TaskScheduler。
4、通过TaskScheduler把Tasks添加到任务队列当中,交给SchedulerBackend进行资源分配和任务调度。
5、调度器给Task分配执行Executor,ExecutorBackend负责执行Task。
函数调用图:
spark提交作业:
sparkContext.runjob
->dagScheduler.runjob
->dagScheduler.submitJob
->DAGSchedulerEventProcessLoop.doOnReceive
->dagScheduler.handleJobSubmitted
stage划分以及提交:
dagScheduler.handleJobSubmitted
-->dagScheduler.submitStage
-->dagScheduler.submitMissingTasks
-->taskScheduler.submitTasks
task调度以及执行:
TaskSchedulerImpl.submitTasks
SchedulableBuilder.addTaskSetManager
CoarseGrainedSchedulerBackend.reviveOffers
CoarseGrainedSchedulerBackend.makeOffers
TaskSchedulerImpl.resourceOffers
CoarseGrainedSchedulerBackend.aunchTasks
CoarseGrainedExecutorBackend.receive
.Executor.launchTask

本文详细解析了Spark作业从提交到执行的整个流程,包括Driver程序触发Action操作启动作业、DAGScheduler如何划分Stage并创建Task,以及TaskScheduler如何调度Task至Executor执行等关键步骤。

4602

被折叠的 条评论
为什么被折叠?



