閱讀333 返回首頁    go 手機大全


spark-submit 參數設置說明__Spark_開發人員指南_E-MapReduce-阿裏雲

本章節將介紹如何在 E-MapReduce 場景下設置 spark-submit 的參數。

集群配置

軟件配置

E-MapReduce 產品版本 1.1.0

  • Hadoop 2.6.0

  • Spark 1.6.0

硬件配置

Master 節點

  • 8 核 16G 500G 高效雲盤

  • 1 台

Worker 節點 x 10 台

  • 8 核 16G 500G 高效雲盤

  • 10 台

總資源:8 核 16G(Worker)x 10 + 8 核 16G(Master)

注意:由於作業提交的時候資源隻計算 CPU 和內存,所以這裏磁盤的大小並未計算到總資源中。

Yarn 可分配總資源:12 核 12.8G(worker)x 10

注意:默認情況下,yarn 可分配核 = 機器核 x 1.5,yarn 可分配內存 = 機器內存 x 0.8。

提交作業

創建集群後,您可以提交作業。首先,您需要在 E-MapReduce 中創建一個作業,配置如下:

上圖所示的作業,直接使用了 Spark 官方的 example 包,所以不需要自己上傳 jar 包。

參數列表如下所示:

  1. --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode client --driver-memory 4g –num-executors 2 --executor-memory 2g --executor-cores 2 /opt/apps/spark-1.6.0-bin-hadoop2.6/lib/spark-examples*.jar 10

參數說明如下所示:

參數 參考值 說明
class org.apache.spark.examples.SparkPi 作業的主類。
master yarn 因為 E-MapReduce 使用 Yarn 的模式,所以這裏隻能是 yarn 模式。
yarn-client 等同於 –-master yarn —deploy-mode client, 此時不需要指定deploy-mode。
yarn-cluster 等同於 –-master yarn —deploy-mode cluster, 此時不需要指定deploy-mode。
deploy-mode client client 模式表示作業的 AM 會放在 Master 節點上運行。要注意的是,如果設置這個參數,那麼需要同時指定上麵 master 為 yarn。
cluster cluster 模式表示 AM 會隨機的在 worker 節點中的任意一台上啟動運行。要注意的是,如果設置這個參數,那麼需要同時指定上麵 master 為yarn。
driver-memory 4g driver 使用的內存,不可超過單機的 core 總數。
num-executors 2 創建多少個 executor。
executor-memory 2g 各個 executor 使用的最大內存,不可超過單機的最大可使用內存。
executor-cores 2 各個 executor 使用的並發線程數目,也即每個 executor 最大可並發執行的 Task 數目。

資源計算

在不同模式、不同的設置下運行時,作業使用的資源情況如下表所示:

yarn-client 模式的資源計算

節點 資源類型 資源量(結果使用上麵的例子計算得到)
master core 1
mem driver-memroy = 4G
worker core num-executors * executor-cores = 4
mem num-executors * executor-memory = 4G
  • 作業主程序(Driver 程序)會在 master 節點上執行。按照作業配置將分配 4G(由 —driver-memroy 指定)的內存給它(當然實際上可能沒有用到)。

  • 會在 worker 節點上起 2 個(由 —num-executors 指定)executor,每一個 executor 最大能分配 2G(由 —executor-memory 指定)的內存,並最大支持 2 個(由- -executor-cores 指定)task 的並發執行。

yarn-cluster 模式的資源計算

節點 資源類型 資源量(結果使用上麵的例子計算得到)
master 一個很小的 client 程序,負責同步 job 信息,占用很小。
worker core num-executors * executor-cores+spark.driver.cores = 5
mem num-executors * executor-memory + driver-memroy = 8g

注意:這裏的 spark.driver.cores 默認是 1,也可以設置為更多。

資源使用的優化

yarn-client 模式

若您有了一個大作業,使用 yarn-client 模式,想要多用一些這個集群的資源,請參見如下配置:

注意:

  • Spark 在分配內存時,會在用戶設定的內存值上溢出 375M 或 7%(取大值)。
  • Yarn 分配 container 內存時,遵循向上取整的原則,這裏也就是需要滿足 1G 的整數倍。
  1. --master yarn-client --driver-memory 5g –-num-executors 20 --executor-memory 4g --executor-cores 4

按照上述的資源計算公式,

  • master 的資源量為:

    • core:1
    • mem:6G (5G + 375M 向上取整為 6G)
  • workers 的資源量為:

    • core: 20*4 = 80
    • mem: 20*5G (4G + 375M 向上取整為 5G) = 100G

可以看到總的資源沒有超過集群的總資源,那麼遵循這個原則,您還可以有很多種配置,例如:

  1. --master yarn-client --driver-memory 5g –num-executors 40 --executor-memory 1g --executor-cores 2
  1. --master yarn-client --driver-memory 5g –num-executors 15 --executor-memory 4g --executor-cores 4
  1. --master yarn-client --driver-memory 5g –num-executors 10 --executor-memory 9g --executor-cores 6

原則上,按照上述的公式計算出來的需要資源不超過集群的最大資源量就可以。但在實際場景中,因為係統,hdfs 以及 E-MapReduce 的服務會需要使用 core 和 mem 資源,如果把 core 和 mem 都占用完了,反而會導致性能的下降,甚至無法運行。

executor-cores 數一般也都會被設置成和集群的可使用核一致,因為如果設置的太多,CPU 會頻繁切換,性能並不會提高。

yarn-cluster 模式

當使用 yarn-cluster 模式後,Driver 程序會被放到 worker 節點上。資源會占用到 worker 的資源池子裏麵,這時若想要多用一些這個集群的資源,請參加如下配置:

  1. --master yarn-cluster --driver-memory 5g –num-executors 15 --executor-memory 4g --executor-cores 4

配置建議

  • 如果將內存設置的很大,要注意 gc 所產生的消耗。一般我們會推薦一個 executor 的內存 <= 64G。

  • 如果是進行 HDFS 讀寫的作業,建議是每個 executor 中使用 <= 5個並發來讀寫。

  • 如果是進行 OSS 讀寫的作業,我們建議是將 executor 分布在不同的 ECS 上,這樣可以將每一個 ECS 的帶寬都用上。比如有 10 台 ECS,那麼就可以配置 num-executors=10,並設置合理的內存和並發。

  • 如果作業中使用了非線程安全的代碼,那麼在設置 executor-cores 的時候需要注意多並發是否會造成作業的不正常。如果會,那麼推薦就設置 executor-cores=1。

最後更新:2016-11-23 16:03:59

  上一篇:go Spark + HBase__Spark_開發人員指南_E-MapReduce-阿裏雲
  下一篇:go SDK-Release__Spark_開發人員指南_E-MapReduce-阿裏雲