3

我有一个 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。

我看过 chaging HADOOP_HEAPmapred.map.child.java.optsmapred.reduce.child.java.opts我不确定将这些设置为什么,因为默认值似乎就足够了。

是否有我遗漏的设置将允许 Hadoop 利用剩余的 ram 从而减少溢出的记录(希望加快工作速度)或者这是正常的行为?

非常感谢!

4

2 回答 2

1

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

无论如何,这是一个关于 hadoop tunning Hadoop Performance的非常有趣的材料

希望能帮助到你!

于 2013-03-01T20:59:06.567 回答
1

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

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

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

于 2013-03-01T21:10:51.287 回答