spark調度原理描述

spark調度的幾個概念

集羣

一個spark集羣可以同時運行多個spark應用

應用

1、main方法、spark-shell、spark-submit能夠運行的spark程序

2、可以理解爲創建SparkContext的driver運行的程序

3、一個spark應用可以運行多個job

job

job對應應用中的行動算子,每執行一個行動算子都會提交一個job

一個job由多個stage(階段)組成

stage階段

一個寬依賴做一次階段的劃分

寬依賴就是shuffle依賴,發生了shuffle的操作都是寬依賴

以下算子都會引發shuffle

**Bykey、repartition、groupBy、SortBy、join

階段的個數 = 寬依賴的個數 + 1

 

一個stage由多個task組成

task任務

task是每個並行的計算過程,並運行於executor(這裏需要注意和executor的關係)

task是真正處理數據的動作

spark調度流程示意圖

 

 

如上圖所示:

1、階段1中,雖然有一次map算子的調用,並生成了新的RDD,但是並沒有產生shuffle,所以在同一階段

2、階段1中有兩個分區,所以會有兩個task並行運行於executor

注意:task對應着線程,executor對應在集羣實例節點上的進程,對比與hadoop中mapReduce中的maptask或reducetask(進程),task線程會輕很多,而executor是啓動集羣就創建好的,task運行在哪個executor中需要driver進行調度

每個task處理一個partition分區

3、階段1沒運行完,階段2不可以開始

4、上圖對應着一個DAG有向無環圖,對應着一次行動算子的調用,一個job

5、當task被提交到executor之後,會根據executor可用的cpu核數,決定一個executor中最多同時運行多少個task

分佈式計算的精髓

分佈式計算的精髓在於,如何把抽象的計算流圖,轉化爲實實在在的分佈式計算任務,然後以並行計算的方式交付執行。

這也是spark最牛的地方:操作分佈式的數據儘量感知不到是分佈式的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章