У меня есть быстро сжатый файл размером 90 МБ, который я пытаюсь использовать в качестве входных данных для Hadoop 2.2.0 на AMI 3.0.4 в AWS EMR.
Сразу же при попытке прочитать файл мой считыватель записей получает следующее исключение:
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)
...
Я использую m1.xlarge в AWS, используя память по умолчанию и io.sort.mb. Если мы распаковываем файл и используем его в качестве входных данных, все идет нормально. Проблема в том, что у нас очень много сжатых файлов, и мы не хотим распаковывать все подряд.
Я не уверен, что нам не хватает параметра конфигурации или какой-то проводки в нашем коде. Не знаю, как действовать.