1. 程式人生 > >【Spark篇】---Spark中資源調度源碼分析與應用

【Spark篇】---Spark中資源調度源碼分析與應用

部分 app post 類名 inf master 執行過程 efault spark

一、前述

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篇】---Spark中資源調度源碼分析與應用