Spark3.0YarnCluster模式任務提交流程原始碼分析

馬晟發表於2020-09-06

1.通過spark-submit指令碼提交spark程式

在spark-submit指令碼里面執行了SparkSubmit類的main方法

2.執行SparkSubmit類的main方法

3.呼叫doSubmit方法

4.呼叫submit方法

在submit方法裡呼叫doRunMain方法,最終呼叫runMain方法

5.在runMain方法裡面獲取mainClass,再去執行start方法

在這裡根據提交模式來選擇mainClass

6.在start方法裡面去呼叫YarnClusterApplication的start方法

7.YarnClusterApplication方法裡面new一個yarnClient物件,並執行run方法

8.run方法裡執行submitApplication提交application

9.submitApplication方法裡首先會去請求RM並返回一個appId,然後建立container和application上下文環境並執行submitApplication提交application

這裡通過createContainerLaunchContext方法啟動了ApplicationMaster

10.呼叫ApplicationMaster類的main方法

在這裡首先new一個ApplicationMaster,然後呼叫了master的run方法

11.呼叫ApplicationMaster的run方法

這裡會根據是否是叢集模式執行不同的方法

12.呼叫runDriver方法

12.1呼叫startUserApplication方法啟動一個driver執行緒

12.2將AM註冊到RM

12.3分配資源

這裡通過呼叫runAllocatedContainers方法在分配的container裡面執行executors

12.4呼叫ExecutorRunnable的run方法,然後呼叫run方法裡面的startContainer方法來啟動executor

12.5呼叫prepareCommand方法來執行org.apache.spark.executor.YarnCoarseGrainedExecutorBackend類

13.執行YarnCoarseGrainedExecutorBackend類main方法的run方法建立executor終端

14.呼叫setupEndpoint建立executor終端

15.反向註冊executor到driver

16.driver端接收

在SparkContext中有SchedulerBackend,它是一個特質,具體實現類為CoarseGrainedSchedulerBackend,該類中有一個receiveAndReply方法來對executor的註冊做回覆

相關文章