天天看點

spark-submit 參數設定

在使用spark時,根據叢集資源情況和任務資料量等,合理設定參數,包括但不限于以下:

參數 說明
master yarn  E-MapReduce 使用 Yarn 的模式
yarn-client:等同于 –-master yarn —deploy-mode client, 此時不需要指定deploy-mode。 
yarn-cluster:等同于 –-master yarn —deploy-mode cluster, 此時不需要指定deploy-mode。
class 作業的主類
deploy-mode client 模式表示作業的 AM 會放在 Master 節點上運作。要注意的是,如果設定這個參數,那麼需要同時指定上面 master 為 yarn。
cluster 模式表示 AM 會随機的在 worker 節點中的任意一台上啟動運作。要注意的是,如果設定這個參數,那麼需要同時指定上面 master 為yarn。
executor-cores 每個executor使用的核心數,預設為1
num-executors 啟動executor的數量,預設為2
executor-memory executor的記憶體大小,預設為1G
driver-cores driver使用的核心數,預設為1
driver-memory driver的記憶體大小,預設為1G
queue 指定了放在哪個隊列裡執行
spark.default.parallelism 該參數用于設定每個stage的預設task數量。這個參數極為重要,如果不設定可能會直接影響你的Spark作業性能,Spark官網建議的設定原則是,設定該參數為num-executors * executor-cores的2~3倍較為合适
spark.storage.memoryFraction    該參數用于設定RDD持久化資料在Executor記憶體中能占的比例,預設是0.6。也就是說,預設Executor 60%的記憶體,可以用來儲存持久化的RDD資料。根據你選擇的不同的持久化政策,如果記憶體不夠時,可能資料就不會持久化,或者資料會寫入磁盤。
spark.shuffle.memoryFraction  該參數用于設定shuffle過程中一個task拉取到上個stage的task的輸出後,如果發現使用的記憶體超出了這個20%的限制,那麼多餘的資料就會溢寫到磁盤檔案中去,如果發現使用的記憶體超出了這個20%的限制,那麼多餘的資料就會溢寫到磁盤檔案中去,此時就會極大地降低性能。
total-executor-cores 所有executor的總核數

(1)executor_cores*num_executors 

     表示的是能夠并行執行Task的數目不宜太小或太大!一般不超過總隊列 cores 的 25%,比如隊列總 cores    400,最大不要超過100,最小不建議低于40,除非日志量很小。

(2)executor_cores 

     不宜為1!否則 work 程序中線程數過少,一般 2~4 為宜。

(3)executor_memory 

     一般 6~10g 為宜,最大不超過20G,否則會導緻GC代價過高,或資源浪費嚴重。

(4)driver-memory 

     driver 不做任何計算和存儲,隻是下發任務與yarn資料總管和task互動,除非你是 spark-shell,否則一般 1-2g

(5)如果需要對RDD進行cache,那麼更多的記憶體,就可以緩存更多的資料,将更少的資料寫入磁盤,甚至不寫入磁盤。減少了磁盤IO。

繼續閱讀