2013-02-28 54 views
3

我有一个运行在独立/伪模式下的4GB内存和4个内核的Ubuntu虚拟机。Hadoop - 减少溢出记录的数量

一切除了设置为默认:

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。

我已经看过chaging HADOOP_HEAP,mapred.map.child.java.optsmapred.reduce.child.java.opts但我不知道该如何设置它们,因为默认值看起来应该足够了。

有没有一个设置我缺少,将允许Hadoop利用剩余的内存因此减少溢出的记录(希望加快工作)或者这是正常的行为?

非常感谢!

+1

这些幻灯片对我有帮助。这很好解释。请看看:http://www.slideshare.net/cloudera/mr-perf – sufinawaz 2013-09-30 16:28:27

回答

1

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

不幸的是,当您使用流式传输时,似乎必须使用Java进行编码,并且无法使用您正在使用的任何语言。

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

+0

看起来这个限制已经在Hadoop的最新版本中取消了。现在的帮助内容如下: -combiner 可选。要作为组合器运行的命令 – b0fh 2014-10-07 12:08:28

1

分配给map/reduce任务的默认内存为200mb。你可以增加与-Dmapred.child.java.opts = -Xmx512M

反正这个值,这是关于Hadoop的tunning一个非常有趣的材料Hadoop Performance

希望它能帮助!