【Spark篇】---Spark中資源和任務排程原始碼分析與資源配置引數應用

LHBlog發表於2018-02-05

一、前述

Spark中資源排程是一個非常核心的模組,尤其對於我們提交引數來說,需要具體到某些配置,所以提交配置的引數於原始碼一一對應,掌握此節對於Spark在任務執行過程中的資源分配會更上一層樓。由於原始碼部分太多本節只抽取關鍵部分和結論闡述,更多的偏於應用。

二、具體細節

 

1、Spark-Submit提交引數

Options:

  • --master

 MASTER_URL, 可以是spark://host:port, mesos://host:port, yarn,  yarn-cluster,yarn-client, local

 

  • --deploy-mode

DEPLOY_MODE, Driver程式執行的地方,client或者cluster,預設是client。

 

  • --class

CLASS_NAME, 主類名稱,含包名

 

  • --jars

  逗號分隔的本地JARS, Driverexecutor依賴的第三方jar包(Driver是把運算元中的邏輯傳送到executor中去執行,所以如果邏輯需要依賴第三方jar包 比如oreacl的包時 這裡用--jars新增)

 

  • --files

用逗號隔開的檔案列表,會放置在每個executor工作目錄

 

  • --conf

spark的配置屬性

 

  • --driver-memory

Driver程式使用記憶體大小(例如:1000M,5G),預設1024M

 

  • --executor-memory

每個executor記憶體大小(如:1000M,2G),預設1G

 

Spark standalone with cluster deploy mode only:

  • --driver-cores

Driver程式的使用core個數(預設為1僅限於Spark standalone模式

 

Spark standalone or Mesos with cluster deploy mode only:

  • --supervise

失敗後是否重啟Driver,僅限於Spark  alone或者Mesos模式

 

Spark standalone and Mesos only:

  • --total-executor-cores

executor使用的總核數,僅限於SparkStandalone、Spark on Mesos模式

 

Spark standalone and YARN only:

  • --executor-cores

每個executor使用的core數,Spark on Yarn預設為1standalone預設為worker上所有可用的core。

 

YARN-only:

  • --driver-cores

driver使用的core,僅在cluster模式下,預設為1。

  • --queue

QUEUE_NAME  指定資源佇列的名稱,預設:default

  • --num-executors

一共啟動的executor數量,預設是2個

 

2、資源排程原始碼分析

 

  • 資源請求簡單圖

 

 

  • 資源排程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

 

           2.1、預設情況每個worker為當前的Application啟動一個Executor,這個Executor使用叢集中所有的cores1G記憶體。

           ./spark-submit --master spark://node01:7077  --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 10000

 

         2.2、workr上啟動多個Executor,設定--executor-cores引數指定每個executor使用的core數量。

        ./spark-submit --master spark://node01:7077 --executor-cores 1 --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 10

 

 

           2.3、記憶體不足的情況下啟動core的情況。Spark啟動是不僅看core配置引數,也要看配置的core的記憶體是否夠用。

          ./spark-submit --master spark://node01:7077 --executor-cores 1 --executor-memory 3g --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 10000

            可見並沒有啟動起來,因為記憶體不夠。。。

            ./spark-submit --master spark://node01:7077 --executor-cores 1 --executor-memory 2g --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 10000

 

           2.4、--total-executor-cores叢集中共使用多少cores

           注意:一個程式不能讓叢集多個節點共同啟動。

          ./spark-submit --master spark://node01: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

 

 

         ./spark-submit --master spark://node01:7077 --executor-cores 1 --executor-memory 1g --total-executor-cores 3 --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 200

          ./spark-submit --master spark://node01: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 200

         注意:生產環境中一定要加上資源的配置  因為Spark是粗粒度排程資源框架,不指定的話,預設會消耗所有的cores!!!!

 

 

3 、任務排程原始碼分析

 

  • Action運算元開始分析

 

                 任務排程可以從一個Action類運算元開始。因為Action類運算元會觸發一個job的執行。

 

  • 劃分stage,以taskSet形式提交任務

 

                DAGScheduler 類中getMessingParentStages()方法是切割job劃分stage。可以結合以下這張圖來分析:

 

相關文章