Hadoop EMR 作业在 RecordReader 初始化之前内存不足

Hadoop EMR job runs out of memory before RecordReader initialized

我试图弄清楚是什么原因导致我的 emr 作业在开始处理我的文件输入之前 运行 内存不足。我得到一个 "java.lang.OutOfMemoryError cannot be cast to java.lang.Exception" 在我的 RecordReader 初始化之前出现错误(也就是在它尝试解压缩文件并处理它们之前)。我 运行 在一个包含大量输入的目录上工作。我能够 运行 在较小的输入集上完成我的工作。有人有什么想法吗?

我意识到答案是主节点上的元数据开销太多。主节点必须为将要处理的每个文件存储约 150 kb 的数据。对于数百万个文件,这可能是千兆字节的数据,这太多了,导致主节点崩溃。

这里是获取更多信息的好来源:http://www.inquidia.com/news-and-info/working-small-files-hadoop-part-1#sthash.YOtxmQvh.dpuf