1. 程式人生 > >資源排程原始碼分析和任務排程原始碼分析

資源排程原始碼分析和任務排程原始碼分析

1.資源排程原始碼分析
資源請求簡單圖
在這裡插入圖片描述
資源排程Master路徑:
在這裡插入圖片描述
路徑:spark-1.6.0/core/src/main/scala/org.apache.spark/deploy/Master/Master.scala
提交應用程式,submit的路徑:
在這裡插入圖片描述
路徑:spark-1.6.0/core/src/main/scala/org.apache.spark/ deploy/SparkSubmit.scala
總結:
1.Executor在叢集中分散啟動,有利於task計算的資料本地化。
2.預設情況下(提交任務的時候沒有設定–executor-cores選項),每一個Worker為當前的Application啟動一個Executor,這個Executor會使用這個Worker的所有的cores和1G記憶體。
3.如果想在Worker上啟動多個Executor,提交Application的時候要加–executor-cores這個選項。
4.預設情況下沒有設定–total-executor-cores,一個Application會使用Spark叢集中所有的cores。
結論演示
使用Spark-submit提交任務演示。也可以使用spark-shell
1.預設情況每個worker為當前的Application啟動一個Executor,這個Executor使用叢集中所有的cores和1G記憶體。
./spark-submit
–master spark://node1:7077
–class org.apache.spark.examples.SparkPi
…/lib/spark-examples-1.6.0-hadoop2.6.0.jar
10000
2.在workr上啟動多個Executor,設定–executor-cores引數指定每個executor使用的core數量。
./spark-submit
–master spark://node1:7077
–executor-cores 1
–class org.apache.spark.examples.SparkPi
…/lib/spark-examples-1.6.0-hadoop2.6.0.jar
10000
3.記憶體不足的情況下啟動core的情況。Spark啟動是不僅看core配置引數,也要看配置的core的記憶體是否夠用。
./spark-submit
–master spark://node1:7077
–executor-cores 1
–executor-memory 3g
–class org.apache.spark.examples.SparkPi
…/lib/spark-examples-1.6.0-hadoop2.6.0.jar
10000
4.–total-executor-cores叢集中共使用多少cores
注意:一個程序不能讓叢集多個節點共同啟動。
./spark-submit
–master spark://node1:7077
–executor-cores 1
–executor-memory 2g
–total-executor-cores 3
–class org.apache.spark.examples.SparkPi
…/lib/spark-examples-1.6.0-hadoop2.6.0.jar
10000
2.任務排程原始碼分析
Action運算元開始分析
任務排程可以從一個Action類運算元開始。因為Action類運算元會觸發一個job的執行。
劃分stage,以taskSet形式提交任務
DAGScheduler 類中getMessingParentStages()方法是切割job劃分stage。可以結合以下這張圖來分析:
在這裡插入圖片描述