GC Overhead Limit Exceeded error
それはjava.lang.OutOfMemoryError
、家族表しJVM
メモリが使い果たされます。
OutOfMemoryError
それはあるjava.lang.VirtualMachineError
とき、サブクラスJVM
のリソース使用率の問題がスロー、より具体的には、このエラーはする予定ですJVM
実行に時間がかかりすぎるGC
と少しヒープメモリを投げたときにのみ、回復することができます。
よるOracle
ならば、公式文書、デフォルトでは、Java
プロセスがかかる98%
実行に多くの時間をGC
、そしてそれが唯一未満2%
ヒープが復元され、その後、JVM
このエラーをスローします。言い換えれば、この手段我々のアプリケーションは、ほとんどすべての使用可能なメモリ、それをきれいにしようとしているが長すぎる過ごしガベージコレクタ、および多くの障害を使い果たしていること。
オリジナルリンク:https://developer.aliyun.com/ask/59564?spm=a2c6h.13159736
HadoopのタスクがOOMエラーが発生することがあり、多くの理由があります。一般に、第一のHadoopパラメータをリセットするかどうかを確認:mapred.child.java.optsを、通常さえ2G最大ヒープメモリと、-Xmx2000mセット。
ハイブは、OOMの修理の原因である可能性があり、関連の設定は以下のとおりです。
理由:地図凝集
によって/個別のキー結果とその集約ハッシュテーブル・ストレージ・グループを使用してマップを集約。
過度のフィールド、または大きなを通して散乱/別個の鍵によってグループの集計結果は、過度のメモリフットプリントをもたらすことができます。
修復:
hive.map.aggr.hash.percentmemory設定を減らす(デフォルトは0.5であり、すなわち、子ヒープメモリの50%)。
理由:結合
結合キーとしてすべてのレコードが非駆動テーブルをキャッシュする必要が参加は同じです
:修正
テーブルは大きなテーブル(右端の参加に書かれた大きなテーブル)を駆動するために設定されていることを確認します。
ドライブが正しいテーブルに設定されている場合、hive.join.emit.interval縮小セットは、(デフォルト、すなわち、出力結果セットが線1000ごとに一度参加し、1000)。
理由:地図参加
地図すべてのデータは小さなテーブルが必要になりますキャッシュに参加し
、修理に:
小さなテーブルを確認するには十分に小さいです。小さなテーブルより1G超える場合は、マップをジョインを使用していないことを検討してください。
- 問題を解決するために、次のパラメータを追加します セット mapreduce.map.java.opts = - Xmx3072m。 設定ハイブ。EXEC .PARALLEL = はtrue。 設定ハイブ。EXEC .parallel.thread。数= 16 。 設定ハイブ。EXEC .compress.output = はtrue。 セット hive.map.aggr.hash.percentmemory = 0.3 ; 設定ハイブ。参加 .emit.interval = 600 ; セット hive.auto。変換します。参加 = falseは、