1. 程式人生 > >Spark OOM:java heap space,OOM:GC overhead limit exceeded解決方法

Spark OOM:java heap space,OOM:GC overhead limit exceeded解決方法

問題描述:

在使用spark過程中,有時會因為資料增大,而出現下面兩種錯誤:

java.lang.OutOfMemoryError: Java heap space

java.lang.OutOfMemoryError:GC overhead limit exceeded

這兩種錯誤之前我一直認為是executor的記憶體給的不夠,但是仔細分析發現其實並不是executor記憶體給的不足,而是driver的記憶體給的不足。在standalone client模式下用spark-submit提交任務時(standalone模式部署時,預設使用的就是standalone client模式提交任務),我們自己寫的程式(main)被稱為driver,在不指定給driver分配記憶體時,預設分配的是512M。在這種情況下,如果處理的資料或者載入的資料很大(我是從hive中載入資料),driver就可能會爆記憶體,出現上面的OOM錯誤。

解決方法:

方法一:在spark-submit中指定 --driver-memory memSize引數來設定driver的jvm記憶體大小,可以通過spark-submit --help檢視其他可以設定的引數。

eg:

./spark-submit \
  --master spark://7070 \
  --class $MAIN_CLASS \
  --executor-memory 3G \
  --total-executor-cores 10 \
  --driver-memory 2g \
  --name $APP_NAME \
  --conf "spark.executor.extraJavaOptions=-XX:+PrintGCDetails -XX:+PrintGCTimeStamps
" \ "$SPARK_APP_JAR"

方法二:在spark_home/conf/目錄中,將spark-defaults.conf.template模板檔案拷貝一份到/spark_home/conf目錄下,命名為spark-defaults.conf,然後在裡面設定spark.driver.memory  memSize屬性來改變driver記憶體大小。

eg:

 spark.master                       spark://master:7077
 spark.default.parallelism          10
 spark.driver.memory                2g
spark.serializer org.apache.spark.serializer.KryoSerializer spark.sql.shuffle.partitions
50

相關推薦

Spark OOMjava heap spaceOOM:GC overhead limit exceeded解決方法

問題描述: 在使用spark過程中,有時會因為資料增大,而出現下面兩種錯誤: java.lang.OutOfMemoryError: Java heap space java.lang.OutOfMemoryError:GC overhead limit exceeded 這兩種錯誤之前我一直認為是e

HIVE 語句執行 中報錯Java heap space

1、報錯資訊 ask with the most failures(4): ----- Task ID:   task_1472873234260_9322_m_000004 URL:   http://hadoop-namenode1:8088/taskdetails.j

頁面報OutofMemoryErrorJava heap space問題定位及優化

背景:伺服器是windows server 2008 R2系統,點選一個匯出報表功能按鈕,頁面報如下錯: tomcat控制檯裡也報類似的錯誤,下面說一下定位和調優方法———— 定位: 1、開啟cmd控制檯,因為是windows系統,使用ps -ef|grep jav

MAT開啟過大的dumpJava heap space OutOfMemory

當用mat分析過大的dump檔案時,可能由於檔案太大而mat的記憶體不足導致報錯,Java heap space。 解決方法為: 1. 執行的時候指定vm引數,加大分配記憶體(如執行在64位機上)

解決spark執行時Java heap space問題

問題描述: 在執行spark程式時,需要讀取200w資料作為快取。在利用.broadcast廣播這些資料時,遇到Exception in thread "main" java.lang.OutOfMemoryError: Java heap space問題。 報錯資訊如下:

關於配置java JDK時不小心刪除PATH的解決方法

上面這種方法我特意去試了一下,找不到所說的PATH,這個方式不行,沒辦法,只有在想別的方法。我在網上又查了一下win7,PATH沒修改時的路徑,  變數名為: path 變數值為: %SystemRoot%\system32;%SystemRoot%;%SystemRoo

錯誤java.security.InvalidKeyException: Illegal key size or default parameters解決方法

Java幾乎各種常用加密演算法都能找到對應的實現。因為美國的出口限制,Sun通過許可權檔案(local_policy.jar、US_export_policy.jar)做了相應限制。因此存在一些問題:●金鑰長度上不能滿足需求(如:java.security.InvalidKe

spark 讀取mongodb失敗,報executor time out 和GC overhead limit exceeded 異常

資源 base for read 就是 conn context mon getc 代碼: import com.mongodb.spark.config.ReadConfig import com.mongodb.spark.sql._ val config = sql

記OutOfMemory異常GC overhead limit exceeded

問題起源: 專案需要一個統計數量的功能,我在實現這個功能的時候為了程式碼的結構,在Service中每一個方法都會進行SQL查詢,並且count,然而上線後,突然出現了一個問題,CPU佔用100%,服務卡住不動了。 這是為啥呢,本地執行是沒有問題的。突然想到之前看過伺服器如果訪問的人數

Android Studio打包的時候出現"java.lang.OutOfMemoryError: GC overhead limit exceeded"

今天專案升級,在用簽名打包的時候出現了"java.lang.OutOfMemoryError: GC overhead limit exceeded"這個錯誤。 原因: JVM丟擲 java.lang.OutOfMemoryError: GC overhead limit exceeded

kettle呼叫webservice服務Java:java.lang.OutOfMemoryError: GC overhead limit exceeded

說明: 背景說明:需要定時同步別的業務系統基於webservice釋出的資料(主表、附表) 問題緣由:service提供方,主表支援批量查詢,一次可以查詢100條,但是附表只能根據主表的主鍵一條一條的查詢。因此我如果要獲取所有的附表內容就要迴圈訪問服務(約1萬多次)因此會出現Java

flume java.lang.OutOfMemoryError: GC overhead limit exceeded

解決辦法: <1>ps -aux|grep flume 檢視剛才啟動的flume程序,發現如下資訊 /usr/jdk/bin/java -Xmx20m -Dflume.root.logger=INFO -cp conf <2>於是看一個flume-ng的p

Android Studio編譯報錯“java.lang.OutOfMemoryError: GC overhead limit exceeded

1.在build.gradle新增指令碼指定編譯堆記憶體 如果在整個工程中生效,則在build.gradle中增加如下配置: android { .............. dexOptions { incremental true

eclipse 提示An internal error occurred during: "Building workspace". GC overhead limit exceeded

最近公司給了一個服務端的專案讓學習研究相關程式碼,結果導進eclipse後就出現了以前沒有出現過的一個異常現象,eclipse一直顯示正在bulideworkspace,eclipse執行很緩慢,什麼都做不了幾乎,卡的不行,緊接著出現了下面的介面              

關於Spark執行流式計算程式中跑一段時間出現GC overhead limit exceeded

最近在升級一個框架的時候,發現某個流式計算程式每隔一定的時間就會出現GC overhead limit exceeded的錯誤問題。 這個問題肯定是記憶體不夠,但是初始設定的記憶體是夠的啊,於是進行各種記憶體優化,如將變數定義在迴圈體外等控制,但是發現只是將這個間隔時間往

Maven依賴包匯入錯誤(IntelliJ IDEA)GC overhead limit exceeded

一、問題背景 最近用IntelliJ IDEA 開啟一個老應用,一直載入依賴不成功,主POM中存在如下錯誤. java.lang.OutOfMemoryError:GC overhead limit exceeded 該問題是由於IDE為JVM分配的最

GC overhead limit exceeded : Spark

我在執行Spark程式的時候報錯 java.lang.OutOfMemoryError:GC overhead limit exceeded 伴隨著通常有: java.lang.OutOfMemoryError:Java heap space o

java.lang.OutOfMemoryError GC overhead limit exceeded原因分析及解決方案

最近一個上線執行良好的專案出現使用者無法登入或者執行某個操作時,有卡頓現象。查看了日誌,出現了大量的java.lang.OutOfMemoryError: GC overhead limit exceeded錯誤。 oracle官方給出了這個錯誤產生的原因和解決方法: Exception in thread

HDFS問題集(一)使用命令報錯com.google.protobuf.ServiceException:java.lang.OutOfMemoryError:java heap space

正常 腳本 spa 執行 xmx error exception 內存 解決方案 僅個人實踐所得,若有不正確的地方,歡迎交流! 一、起因   執行以下兩條基本的HDFS命令時報錯 1 hdfs dfs -get /home/mr/data/* ./ 2 hdfs dfs

解決sqoop報錯java.lang.OutOfMemoryError: Java heap space

keep image ces use ati size tex 問題 -- 報錯棧: 2017-06-15 16:24:50,449 INFO [main] org.apache.sqoop.mapreduce.db.DBRecordReader: Executing