【Spark篇】---Spark中資源和任務調度源碼分析與資源配置參數應用

1、前述node

Spark中資源調度是一個很是核心的模塊,尤爲對於咱們提交參數來講,須要具體到某些配置,因此提交配置的參數於源碼一一對應,掌握此節對於Spark在任務執行過程當中的資源分配會更上一層樓。因爲源碼部分太多本節只抽取關鍵部分和結論闡述,更多的偏於應用。shell

2、具體細節apache

 

一、Spark-Submit提交參數框架

Options:oop

  • --master

 MASTER_URL, 能夠是spark://host:port, mesos://host:port, yarn,  yarn-cluster,yarn-client, local源碼分析

 

  • --deploy-mode

DEPLOY_MODE, Driver程序運行的地方,client或者cluster,默認是client。spa

 

  • --class

CLASS_NAME, 主類名稱,含包名scala

 

  • --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個

 

二、資源調度源碼分析

 

  • 資源請求簡單圖

 

 

  • 資源調度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.一、默認狀況每一個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.二、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.三、內存不足的狀況下啓動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.四、--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。能夠結合如下這張圖來分析:

相關文章
相關標籤/搜索