【已解決】 IDEA運行spark程序報錯:GC overhead limit exceeded?


1. 問題描述

在運行代碼之后,出現以下錯誤:

Exception in thread "main" org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 107.0 failed 1 times, most recent failure: Lost task 0.0 in stage 107.0 (TID 208, localhost, executor driver): java.lang.OutOfMemoryError: GC overhead limit exceeded

經查詢之后,是由於JVM花費太長時間執行GC且只能回收很少的堆內存時拋出的
一般可以通過更改JVM啟動配置增加堆大小來解決
參考:https://blog.csdn.net/github_32521685/article/details/89953796

2. 解決過程

1. 增加idea運行或編譯內存

  1. file -> settings
  2. 搜索maven,點擊importing,修改JVM啟動項

並沒有解決問題

2. 增加spark的executor.memory和driver.memory

val sparkConf = new SparkConf()......set("spark.executor.memory","6G").set("spark.driver.memory","3G")

也沒有起作用

3. 減小executor.cores

executor core數量太多,可能會導致了多個core之間爭奪gc時間以及資源,但修改為為1仍然報錯

4. 優化代碼

沒辦法,其他方案都不行,只好試試減少計算
在需要用的RDD的原始數據集上加.cache(),進行緩存一下,它就不會重復計算,整個的計算的效率會高一些,不會出現內存溢出的問題
終於,運行成功了

3. 心得

寫代碼的時候,還是要多注意代碼的優化!!!


免責聲明!

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



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