1

AWS EMR の AMI 3.0.4 で Hadoop 2.2.0 への入力として使用しようとしている 90MB のスナッピー圧縮ファイルがあります。

ファイルを読み取ろうとするとすぐに、私のレコード リーダーは次の例外を受け取ります。

2014-05-06 14:25:34,210 FATAL [main] org.apache.hadoop.mapred.YarnChild: Error running child : java.lang.OutOfMemoryError: Java heap space
at org.apache.hadoop.io.compress.BlockDecompressorStream.getCompressedData(BlockDecompressorStream.java:123)
at org.apache.hadoop.io.compress.BlockDecompressorStream.decompress(BlockDecompressorStream.java:98)
at org.apache.hadoop.io.compress.DecompressorStream.read(DecompressorStream.java:85)
at java.io.InputStream.read(InputStream.java:101)
at org.apache.hadoop.util.LineReader.readDefaultLine(LineReader.java:211)
at org.apache.hadoop.util.LineReader.readLine(LineReader.java:174)
at org.apache.hadoop.util.LineReader.readLine(LineReader.java:365)
...

デフォルトのメモリと io.sort.mb を使用して、AWS で m1.xlarge を実行しています。ファイルを解凍し、それを入力として使用すると、すべてうまくいきます。問題は、非常に多くの圧縮ファイルがあり、すべてを解凍したくないことです。

何らかの構成設定やコードの配線が欠落しているのかどうかはわかりません。続行方法がわからない。

4

1 に答える 1

2

あなたが提供したログによると、解凍されたブロックのサイズが利用可能なヒープ サイズを超えているようです。

EMR での m1.large インスタンスの仕様についてはわかりませんが、このエラーを回避するために試すことができるいくつかのことを以下に示します。

通常、error running child は、yarn が生成した子が MR ジョブを続行するのに十分なヒープ領域を見つけられないことを意味します。

試すオプション:

1)mapred.java.child.optsサイズを大きくします。これは、子が個別の JVM プロセスとして取得するデフォルトのサイズです。デフォルトでは、その 200mb は、合理的なデータ分析には小さいです。パラメーター-XmxNu(u 単位の N の最大ヒープ サイズ) および -XmsNu (u 単位の N の初期ヒープ サイズ) を変更します。1Gb ie -Xmx1g を試して効果を確認し、成功した場合は小さくします

2)mapred.child.ulimit以前に設定した最大ヒープ サイズの 1.5 倍または 2 倍のサイズに設定します。プロセスの仮想メモリの量を設定します。3)一度に実行する並列マッパーとリデューサーの最大数を

減らしmapred.tasktracker.map.tasks.maximumて設定します。4) - すでに試したもの。してみてください。そして最後に、試行錯誤の方法なので、どれが固執するかを試してみてください.mapred.tasktracker.reduce.tasks.maximum

io.sort.mb 0.25*mapred.child.java.opts < io.sort.mb < 0.5*mapred.child.java.opts

于 2014-05-06T17:03:18.547 に答える