GCオーバーヘッドの制限を超えたため、ハイブタスクが失敗したHadoopの(OOM)

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は、

 

おすすめ

転載: www.cnblogs.com/shimingjie/p/11941768.html