0

在 map-reduce 作业中,我收到错误“java.lang.OutOfMemoryError: Java heap space”。由于我在映射器函数中收到此错误;我认为当我降低映射器的输入大小时,我不会再有错误,所以我将 mapred.max.split.size 更改为更低的值。

然后,我再次开始工作,我看到“要执行的映射器任务的数量”增加了,所以我认为降低 mapred.max.split.size 是个好主意:更多的映射器具有更低的内存需求。

但是,我一次又一次地收到“java.lang.OutOfMemoryError: Java heap space”错误。

看来,我不明白 hadoop 是如何工作的。

有什么建议么?

4

1 回答 1

3

您可以使用,修改子堆大小mapred.child.java.opts=-Xmx3000m(在较新的 API 中,您可以更具体地使用mapreduce.map.java.opts)。您还可以通过选择可以并行运行多少个 map 和 reduce 任务来调整您的节点。这可以通过Tasktracker 中可用的 map和 reduce插槽的数量来控制,例如:

mapred.tasktracker.map.tasks.maximum=7
mapred.tasktracker.reduce.tasks.maximum=3

还有更多选择mapred.cluster.map.memory.mb=300mapred.job.map.memory.mb=600我认为您现在不需要它们。

于 2013-09-11T12:59:12.373 回答