我有一个 90MB 的 snappy 压缩文件,我试图将其用作 AWS EMR 中 AMI 3.0.4 上 Hadoop 2.2.0 的输入。
在尝试读取文件时,我的记录阅读器立即收到以下异常:
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 上运行。如果我们解压缩文件并将其用作输入,则一切正常。问题是我们有大量的压缩文件,不想到处解压。
我不确定我们的代码中是否缺少配置设置或布线。不知道如何进行。