如何更改hadoop中的映射器内存要求?

时间:2013-09-11 09:36:21

标签: hadoop mapreduce

在map-reduce作业中,我收到错误“java.lang.OutOfMemoryError:Java堆空间”。因为我在mapper函数中得到了这个错误;我认为当我将输入大小降低到映射器时,我将不再有错误,所以我将mapred.max.split.size更改为更低的值。

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

但是,我一次又一次地得到了“java.lang.OutOfMemoryError:Java堆空间”错误。

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

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

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

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

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