1、降低cache操作的內存占比
1.1 為什么要降低cache操作的內存占比
spark的堆內存分別兩部分,一部分用來給Rdd的緩存進行使用,另一部分供spark算子函數運行使用,存放函數中的對象
默認情況下,供Rdd緩存使用的占0.6,但是,有些時候,不需要那么多的緩存,反而函數計算需要更多的內存,這樣導致頻繁的minor gc和full gc,導致性能降低。
1.2 如何調節
根據spark作業的yarn界面,如果有頻繁的gc,就需要調節
//調節cache操作的內存占比 conf.set("spark.storage.memoryFraction", "0.4");
2、調節executor的堆外內存
2.1 什么情況下進行調節
當spark作業中,是不是的報錯,shuffle file cannot find,executro、task lost,out of memory等,可能是堆外內存不足,導致executor掛掉,task拉取該executor的數據是無法獲取到,導致以上錯誤,甚至spark作業崩潰。
2.2 如何調節
在spark作業的提交腳本中,修改spark.yarn.executor.memoryOverhead參數(默認為300多M)
/usr/local/spark/bin/spark-submit \ --class com.ibeifeng.sparkstudy.WordCount \ --num-executors 80 \ --driver-memory 6g \ --executor-memory 6g \ --executor-cores 3 \ --master yarn-cluster \ --queue root.default \ --conf spark.yarn.executor.memoryOverhead=2048 \ 調節堆外內存 --conf spark.core.connection.ack.wait.timeout=300 \ 調節連接時間 /usr/local/spark/spark.jar
3、調節連接等待時間
3.1 什么情況下需要調節
當一個executor的blockManager需要從其他的executor的blockManager中拉取數據,但是目標executor正處在gc階段,此時源executor會進入等待連接狀態(默認60s),如果多次拉取失敗則會報 一串filed id uuid(dsfsss-12323-sdsdsd-wewe) not found ,file lost,甚至spark作用直接崩潰。
3.2 如何調節
在spark作業的提交腳本中,修改conf spark.core.connection.ack.wait.timeout參數(默認為60s)