spark-submit提交spark任務(wù)的具體參數(shù)配置說明

今天我們主要來說一下spark-submit的時候一些重要的參數(shù)的配置,和spark提交的兩種模式;
spark提交任務(wù)常見的兩種模式:
1,local[k]:本地使用k個worker線程運行saprk程序.這種模式適合小批量數(shù)據(jù)在本地調(diào)試代碼用.(若使用本地的文件,需要在前面加上:file://)
2,spark on yarn模式:
(1)yarn-client模式: 以client模式連接到y(tǒng)arn集群,該方式driver是在client上運行的;
(2)yarn-cluster模式:以cluster模式連接到y(tǒng)arn集群,該方式driver運行在worker節(jié)點上.
(3)對于應(yīng)用場景來說,Yarn-Cluster適合生產(chǎn)環(huán)境,Yarn-Client適合交互和調(diào)試。
3,提交任務(wù)時的幾個重要參數(shù):
executor-cores 每個executor使用的內(nèi)核數(shù),默認為1
num-executors 啟動executor的數(shù)量,默認為2
executor-memory executor的內(nèi)存大小,默認為1G
driver-cores driver使用的內(nèi)核數(shù),默認為1
driver-memory driver的內(nèi)存大小,默認為1G
queue 指定了放在哪個隊列里執(zhí)行
spark.default.parallelism
該參數(shù)用于設(shè)置每個stage的默認task數(shù)量。這個參數(shù)極為重要,

如果不設(shè)置可能會直接影響你的Spark作業(yè)性能

Spark官網(wǎng)建議的設(shè)置原則是,設(shè)置該參數(shù)為num-executors * executor-cores的2~3倍較為合適

spark.storage.memoryFraction 該參數(shù)用于設(shè)置RDD持久化數(shù)據(jù)在Executor內(nèi)存中能占的比例,默認是0.6。也就是說,
默認Executor 60%的內(nèi)存,可以用來保存持久化的RDD數(shù)據(jù)。根據(jù)你選擇的不同的持久化策略,
如果內(nèi)存不夠時,可能數(shù)據(jù)就不會持久化,或者數(shù)據(jù)會寫入磁盤。
spark.shuffle.memoryFraction 該參數(shù)用于設(shè)置shuffle過程中一個task拉取到上個stage的task的輸出后,
進行聚合操作時能夠使用的Executor內(nèi)存的比例,默認是0.2。也就是說,

Executor默認只有20%的內(nèi)存用來進行該操作。shuffle操作在進行聚合時,

如果發(fā)現(xiàn)使用的內(nèi)存超出了這個20%的限制,那么多余的數(shù)據(jù)就會溢寫到磁盤文件中去,

此時就會極大地降低性能。

total-executor-cores 所有executor的總核數(shù)
4.幾個重要的參數(shù)說明:
(1)executor_cores*num_executors
表示的是能夠并行執(zhí)行Task的數(shù)目不宜太小或太大!一般不超過總隊列 cores 的 25%,比如隊列總 cores 400,最大不要超過100,最小不建議低于40,除非日志量很小。
(2)executor_cores
不宜為1!否則 work 進程中線程數(shù)過少,一般 2~4 為宜。
(3)executor_memory
一般 6~10g 為宜,最大不超過20G,否則會導(dǎo)致GC代價過高,或資源浪費嚴(yán)重。
(4)driver-memory
driver 不做任何計算和存儲,只是下發(fā)任務(wù)與yarn資源管理器和task交互,除非你是 spark-shell,否則一般 1-2g
增加每個executor的內(nèi)存量,增加了內(nèi)存量以后,對性能的提升,有三點:
(5)如果需要對RDD進行cache,那么更多的內(nèi)存,就可以緩存更多的數(shù)據(jù),將更少的數(shù)據(jù)寫入磁盤,
甚至不寫入磁盤。減少了磁盤IO。
(6)對于shuffle操作,reduce端,會需要內(nèi)存來存放拉取的數(shù)據(jù)并進行聚合。如果內(nèi)存不夠,也會寫入磁盤。
如果給executor分配更多內(nèi)存以后,就有更少的數(shù)據(jù),需要寫入磁盤,甚至不需要寫入磁盤。減少了磁盤IO,提升了性能。
(7)對于task的執(zhí)行,可能會創(chuàng)建很多對象.如果內(nèi)存比較小,可能會頻繁導(dǎo)致JVM堆內(nèi)存滿了,然后頻繁GC,垃圾回收 ,minor GC和full GC.(速度很慢).內(nèi)存加大以后,帶來更少的GC,垃圾回收,避免了速度變慢,性能提升。
如果有寫的不對的地方,歡迎大家指正,如果有什么疑問,可以加QQ群:340297350,更多的Flink和spark的干貨可以加入下面的星球


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容