Spark Stage 的劃分

 

Spark做業調度

對RDD的操做分爲transformation和action兩類,真正的做業提交運行發生在action以後,調用action以後會將對原始輸入數據的全部transformation操做封裝成做業並向集羣提交運行。這個過程大體能夠以下描述:git

    • DAGSchedulerRDD之間的依賴性進行分析,經過DAG來分析各個RDD之間的轉換依賴關係
    • 根據DAGScheduler分析獲得的RDD依賴關係將Job劃分紅多個stage
    • 每一個stage會生成一個TaskSet並提交給TaskScheduler,調度權轉交給TaskScheduler,由它來負責分發task到worker執行

 

接下來,理解 Spark 中RDD的依賴關係.github

 

RDD依賴關係  

Spark中RDD的粗粒度操做,每一次transformation都會生成一個新的RDD,這樣就會創建RDD之間的先後依賴關係,在Spark中,依賴關係被定義爲兩種類型,分別是窄依賴和寬依賴spa

 

  • 窄依賴,父RDD的分區最多隻會被子RDD的一個分區使用
  • 寬依賴,父RDD的一個分區會被子RDD的多個分區使用(寬依賴指子RDD的每一個分區都要依賴於父RDD的全部分區,這是shuffle類操做)

 

rddependency

圖中左邊都是窄依賴關係,能夠看出分區是1對1的。右邊爲寬依賴關係,有分區是1對多。(map,filter,union屬於第一類窄依賴).net

 

 

stage的劃分

 

stage的劃分是Spark做業調度的關鍵一步,它基於DAG肯定依賴關係,藉此來劃分stage,將依賴鏈斷開,每一個stage內部能夠並行運行,整個做業按照stage順序依次執行,最終完成整個Job。實際應用提交的Job中RDD依賴關係是十分複雜的,依據這些依賴關係來劃分stage天然是十分困難的,Spark此時就利用了前文提到的依賴關係,調度器從DAG圖末端出發,逆向遍歷整個依賴關係鏈,遇到ShuffleDependency(寬依賴關係的一種叫法)就斷開,遇到NarrowDependency就將其加入到當前stagestage中task數目由stage末端的RDD分區個數來決定,RDD轉換是基於分區的一種粗粒度計算,一個stage執行的結果就是這幾個分區構成的RDD。orm

圖中能夠看出,在寬依賴關係處就會斷開依賴鏈,劃分stage,這裏的stage1不須要計算,只須要計算stage2和stage3,就能夠完成整個Job。blog

 

 

總結:遇到一個寬依賴就分一個stage

 

 

 

 

 

 

 

 

參考博客:https://blog.csdn.net/mahuacai/article/details/51919615文檔

                  https://wongxingjun.github.io/2015/05/25/Spark%E4%BD%9C%E4%B8%9A%E8%B0%83%E5%BA%A6%E4%B8%ADstage%E7%9A%84%E5%88%92%E5%88%86/get

相關文章
相關標籤/搜索