Spark: Job in detail

时间:2021-11-22 23:11:32

1、sc.runJob -> dagScheduler.runJob -> submitJob  

2、DAGSchedueler::submitJob 会创建 JobSubmitted 的 event 发给内嵌类 eventProcessActor

3、eventPRocessActor 在接收到 JobSubmmitted 之后调用 processEvent 处理函数

4、job 到 stage 的转换,生成 finalStage 并提交运行,关键是调用 submitStage

5、在 SubmitStage 中会计算 stage 之间的依赖关系,依赖关系分为宽依赖和窄依赖两种

6、如果计算中发现当前的 stage 没有任何依赖或者所有的依赖都已经准备完毕,则提交 task

7、提交 task 是调用函数 submitMissingTasks 来完成

8、task 真正运行在哪个 worker 上由 TaskScheduler 来管理,也就是 submitMissingTasks 会调用 TaskScheduler::submitTasks

9、TaskSchedulerImpl 中会根据 Spark 的当前运行模式来创建相应的 backend,如果是在单机运行则创建 LocalBackend

10、LocalBackend 收到 TaskSchedulerImpl 传递进行的 ReceiveOffers 事件

11、receiverOffers -> executor.launchTask -> TaskRunner.run