2015-05-11 35 views
-1

我试着在大约20GB的数据上运行mapreduce作业,并且在减少混洗阶段出现错误。它说因为内存堆空间。然后,我读了很多源代码,我必须减少mapred-site.xml上mapreduce.reduce.shuffle.input.buffer.percent属性的默认值0,7。所以,我把它降低到0.2。如何为hadoop mapreduce配置java内存堆空间?

我想问一下,该属性是否会影响我的mapreduce作业的时间性能。那么,我该如何正确配置才能使我的mapreduce作业永远不会出错?

回答

0

mapreduce.reduce.shuffle.input.buffer.percent 0.70在混洗期间从最大堆大小分配到存储映射输出的内存百分比。 由此看来,如果将其降至任意值,则可能会降低混洗阶段的性能。 他们本来一定的推理和测试背后的默认值 您可以点击这里等相关性能 http://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml

什么是你的映射器输出的大约数据,如果这是巨大的,那么你可能需要增加的数量映射器 同样,如果减少器的数量很少,堆栈空间错误可能会在减少阶段发生。

你可能要检查你的工作柜台,增加映射器/减速器数量 你也可以尝试通过设置属性mapreduce.reduce.memory.mbmapreduce.map增加映射器/减速器内存 .memory.mb

+0

非常感谢您的回答,我想再问一次,所以当我们在内存配置上出错时,hadoop mapreduce可以让任务失败。那么,我们可以说,这个问题取决于记录的数量,那么,hadoop如何处理这个问题或将失败风险降到最低? Thanks2 –

+0

理想的洗牌不应该有这个问题。这是什么大数据,事情不会适合内存有一个错误https://issues.apache.org/jira/browse/MAPREDUCE-1182。你在旧版本?如果减少任务的内存不足,那么它是一个程序员的错误(减速器数量太低或自定义分区不好) – bl3e

+0

通过我使用hadoop 2.6.0的方式,我设置reduce task的数量与slave的数量相同节点,你觉得怎么样? –