一、下降cache操做的內存佔比緩存
1.1 爲何要下降cache操做的內存佔比函數
spark的堆內存分別兩部分,一部分用來給Rdd的緩存進行使用,另外一部分供spark算子函數運行使用,存放函數中的對象性能
默認狀況下,供Rdd緩存使用的佔0.6,可是,有些時候,不須要那麼多的緩存,反而函數計算須要更多的內存,這樣致使頻繁的minor gc和full gc,致使性能下降。ui
1.2 如何調節spa
根據spark做業的yarn界面,若是有頻繁的gc,就須要調節 code
//調節cache操做的內存佔比 conf.set("spark.storage.memoryFraction", "0.4");
二、調節executor的堆外內存對象
2.1 什麼狀況下進行調節blog
當spark做業中,是否是的報錯,shuffle file cannot find,executro、task lost,out of memory等,多是堆外內存不足,致使executor掛掉,task拉取該executor的數據是沒法獲取到,致使以上錯誤,甚至spark做業崩潰。內存
2.2 如何調節it
在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.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)