Spark Standalone模式 Master程式掛掉問題

破棉襖發表於2016-03-24

環境:

spark version :1.5.2
執行模式:standalone

過程分析
叢集上跑著大量任務,但發現叢集每執行兩天就會掛掉一次。掛掉後叢集所有work程式和master程式都會死掉。於是檢視work程式日誌:


於是再檢視Master程式日誌發現報OOM:
java.lang.OutOfMemoryError: GC overhead limit execeeded

由於讀過Storage模組原始碼,得知快取資料和Master程式無關。於是透過jstat工具監控了一下Master程式,發現每當任務執行完關閉後,
Master程式的jvm老年代佔用會直線飆高。無意間想到會不會和日誌記錄有關,查了一下果然,Spark的History預設會將50個執行完的application
的一些資訊(ui介面要顯示的內容)載入到Master程式中,由於我們的任務複雜度高,有些任務的日誌已經達到150M,這些大資料會直接被
載入到jvm老年代中,當老年代撐滿,執行多次full gc後也釋放不掉,所有就報了GC overhead limit execeeded異常。

解決方案
由於我們叢集記憶體資源有限,已不可能再加大Master程式記憶體大小,所以只能考慮透過配置來解決
查詢了一下文件發現有一個配置項:spark.history.retainedApplications 該引數會控制載入在記憶體中的application日誌數量。 但是透過
配置該配置項發現記憶體還是會gc不掉,不知算不算是BUG。再查文件發現了另一個配置項:spark.deploy.retainedApplications 該配置項是控制
ui頁面上顯示的歷史application數量。在spark-env.sh 中增加 :export SPARK_MASTER_OPTS="-Dspark.deploy.retainedApplications=5"   再次監控
jvm發現當老年代撐滿後會執行一次full gc釋放掉記憶體,至此,問題解決。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29754888/viewspace-2063153/,如需轉載,請註明出處,否則將追究法律責任。

相關文章