2019-02-25
閱讀量:
2046
spark 如何解決task過多的情況?
task過多,原因是分區(qū)的問題。我們應(yīng)該從分區(qū)入手,是輸入的小文件太多,還是本來就會有大數(shù)據(jù)量。在分區(qū)過多時,限定分區(qū)個數(shù)看看性能是否提高,也可以在filter等操作后對分區(qū)進(jìn)行一定縮減。大量使用shuffle操作使task增加(這個應(yīng)該不是本問題原因,但是我們應(yīng)該考慮這也是讓task增加的原因),這樣會完成多個stage串行會降低效率。
當(dāng)我們真的無法避免這么多task時候,我們應(yīng)該用最佳的參數(shù)進(jìn)行調(diào)優(yōu),如下:
1) executor_cores*num_executors 不宜太小或太大!一般不超過總隊列 cores 的 25%,比如隊列總 cores 400,最大不要超過100,最小不建議低于 40,除非日志量很小。
2) executor_cores 不宜為1!否則 work 進(jìn)程中線程數(shù)過少,一般 2~4 為宜。
3) executor_memory 一般 6~10g 為宜,最大不超過 20G,否則會導(dǎo)致 GC 代價過高,或資源浪費(fèi)嚴(yán)重。
4) spark_parallelism 一般為 executor_cores*num_executors 的 1~4 倍,系統(tǒng)默認(rèn)值 64,不設(shè)置的話會導(dǎo)致 task 很多的時候被分批串行執(zhí)行,或大量 cores 空閑,資源浪費(fèi)嚴(yán)重。
5) driver-memory 早前有同學(xué)設(shè)置 20G,其實(shí) driver 不做任何計算和存儲,只是下發(fā)任務(wù)與yarn資源管理器和task交互,除非你是 spark-shell,否則一般 1-2g 就夠了。






評論(0)


暫無數(shù)據(jù)
推薦帖子
0條評論
1條評論
0條評論
0條評論