分享Spark2任務劃分以及執行流程的操作

分享Spark2任務劃分以及執行流程的操作

1、spark Application中可以由不同的action觸發job,也就是說一個Application裡可以有很多的job,每個job是由一個或者多個stage構成的,後面的stage依賴前面的stage,只有前面依賴的stage計算完成後面的stage才會計算;

2、stage劃分的就是根據寬依賴如:reduceByKey、groupByKey等前後就需要劃分為兩個stage;

3、由action(如collect)導致了SparkContext.runJob的執行,最終導致了DAGScheduler中的submitJob的執行向自己發送JobSubmitted消息(解耦合),

分享Spark2任務劃分以及執行流程的操作

當自己接收到JobSubmitted消息後出發handleJobSubmitted方法的執行,在其方法中會創建finalStage;

分享Spark2任務劃分以及執行流程的操作

利用createResultStage方法找到parents

分享Spark2任務劃分以及執行流程的操作

在尋找parents(List)的過程中採用廣度優先的算法。

當Executor接收到任務後會通過線程池複用的方式執行任務。

當executor執行到runTask時會有ShuffleMapTask和ResultTask,我們以ShuffleMapTask為例看看最後是怎樣執行到RDD的compute方法的。

分享Spark2任務劃分以及執行流程的操作

會執行rdd.iterator

分享Spark2任務劃分以及執行流程的操作

如果存儲基本不是NONE就執行getOrCompute

分享Spark2任務劃分以及執行流程的操作

好了,今天的知識就分享到這裡,歡迎關注愛編程的南風,私信關鍵詞:大數據 ,獲取更多學習大數據的資源,如果文章對你有有幫助,請收藏關注,在今後與你分享更多學習大數據的文章。同時歡迎在下面評論區留言如何學習大數據。


分享到:


相關文章: