Hadoop - 减少溢出记录的数量

时间:2013-02-28 22:41:15

标签: hadoop hadoop-streaming

我有一个Ubuntu vm独立运行/伪模式,4gb ram和4个核心。

除了以下内容外,所有内容都设置为默认值:

io.file.buffer.size=65536
io.sort.factor=50
io.sort.mb=500
mapred.tasktracker.map.tasks.maximum=4
mapred.tasktracker.reduce.tasks.maximum=4

这个ofc不会是一台生产机器,但是我正在摆弄它以获得微调。

我的问题是,当我运行我的基准Hadoop Streaming作业(在1.8gb文本文件上获得不同的记录)时,我得到了大量的溢出记录,而上述调整似乎并没有减少溢出。另外我注意到当我在Ubuntu的系统监视器中监视内存使用情况时,它永远不会被完全使用,并且永远不会超过2.2gb。

我查看了HADOOP_HEAPmapred.map.child.java.optsmapred.reduce.child.java.opts,但我不确定将这些设置为什么,因为默认设置看起来应该足够了。

是否有一个我缺少的设置,允许Hadoop利用剩余的ram,从而减少溢出的记录(希望加快工作)或者这是正常行为吗?

非常感谢!

2 个答案:

答案 0 :(得分:1)

分配给map / reduce任务的默认内存为200mb。您可以使用-Dmapred.child.java.opts = -Xmx512M

增加该值

无论如何,这是关于hadoop tunning Hadoop Performance

的一个非常有趣的材料

希望它有所帮助!

答案 1 :(得分:1)

除了增加内存之外,您是否考虑过在映射步骤之后是否可以为您的任务运行合并器,这将压缩并减少需要保留在内存中或溢出的记录数量?

不幸的是,当您使用流媒体时,似乎必须用Java编码,并且不能使用您正在使用的任何语言。

http://wiki.apache.org/hadoop/HadoopStreaming