spark調優-如何合理的分配資源(executor-memory,num-executors,executor-cores)


executor-memory

在集群資源允許的情況下,且不oom的情況下,通常越多越好,同時要在webui觀察gc時長,達到平衡值(過多的內存會導致單次gc所需時間過長,過少的內存會導致頻繁gc),個人建議上限為單個containers最大值的75%。

 

num-executors,executor-cores

num-executors和executor-cores,由於執行任務的並發數=num-executors * executor-cores 。所以這一點經常會思考是100*1好,還是50*2比較好?

1.假設shuffer壓力不大

(1)在數據分布均勻,executor-memory=8G,100*1是比50*2的理論上是要好些的,因為這樣單個任務所擁有的內存會更充足,gc的次數會更少。

(2)在數據分布不均勻的情況下,可設置executor-memory=16G,50*2理論上是比100*1效果要好些的,因為如果設置為100*1,數據量小的任務會很快執行完,造成executor空閑。資源浪費。且在數據不均勻的情況下,executor-memory要適當提高,以免oom。

2.若shuffer有一定壓力

(1)shuffer的本質是在網絡磁盤IO,假設每個executor都分布在不同的節點,那么過多的executor-num會造成網絡之間的IO過大,shuffer read可能造成timeout。所以這個時候理論上是設置較小的executor-num,較多的executor-cores,和較大的executor-memory是比較合理。以上文為例: executor-memory=32G num-executors=25 executor-cores =4

3.若任務主要是sc.textFile().map().saveAsTextFile

那么其瓶頸主要是在讀取hdfs文件,以及業務代碼運行效率上。在單個節點給予過多的executor-cores,可能造成節點和hdfs的IO打滿。那么這個時候應該適當降低executor-cores,增加executor-num。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM