┃巨量資料開發┃ Spark的任務提交流程

2020-10-12 11:00:03

1、通過Spark的指令碼spark-submit初始化SparkContext
2、初始化SparkContext會初始化兩個非常重要的物件DAGScheduler和TaskScheduler
3、當DAGScheduler和TaskScheduler建立成功後,會生成一個Application,註冊到Master節點。Application中封裝的是提交的各種引數(核數、記憶體等)以及所需要的的jar包。參考:./spark-submit --master xxx --executor-memeory xx --total-executor-cores xx
4、Master在接收到Driver端提交過來的Application後,會通過資源排程計算Application需要的資源,並將任務傳送到Worker節點
5、Worker收到Master發來的任務請求,會啟動Executor,裡面封裝的是各種資源
6、當Worker內的Executor啟動完成,並且成功床架執行緒池後,叢集的準備工作完成。會向Driver端反向註冊,準確的說是想TaskScheduler註冊。至此,SparkContext的初始化完成
7、此時開始執行任務,我們程式碼中沒遇到一個Action運算元,都會觸發一個job
8、將job劃分為多個stage,通過stage的劃分演演算法,進行階段劃分
9、劃分完stage後,會在stage的內部提交task,通過TaskSet將task提交給TaskSceduler
10、TaskSceduler在接收到任務後,會將task分發到不同Executor執行
11、在提交過程中中,內部會通過在地化級別,對任務進行級別劃分,共有5種級別
12、TaskRunner執行Task,以FIFO的模式進行任務排程
13、Task內部,會將Task分為兩種:上游Task(MapTask)和下游Task(ReduceTask)