0

我创建了一个 Elastic MapReduce 作业,并且正在尝试优化其性能。

目前我正在尝试增加每个实例的映射器数量。我是通过 mapred.tasktracker.map.tasks.maximum=X

elastic-mapreduce --create --alive --num-instance 3 \
 --bootstrap-action s3://elasticmapreduce/bootstrap-actions/configure-hadoop \
 --args -s,mapred.tasktracker.map.tasks.maximum=5

每次我尝试将每个小实例的 X 设置为 2 时,初始化都会失败,由此我得出结论,hadoop 为每个映射任务分配了 800m 的内存。对我来说,这似乎太过分了。我希望它是400m的顶部。

如何告诉 hadoop 为每个地图任务使用更少的内存?

4

1 回答 1

3

检查mapred.child.java.opts属性。它默认为 -Xmx200m,这意味着每个 map/reduce 任务有 200MB 的堆。

看起来EC2 small有 1.7 GB 内存。这是 TaskTracker 节点上 Hadoop 进程默认设置的内存。感谢“Hadoop:权威指南”

Datanode 1,000 MB
Tasktracker 1,000 MB
Tasktracker 子地图任务 400 MB (2 * 200 MB)
Tasktracker 子地图任务 400 MB (2 * 200 MB)

总计为 2,800MB。

除此之外,还有操作系统内存。要么选择更好的配置,要么更改默认设置。仅供参考,这是针对不同节点的硬件配置的建议。

于 2011-09-26T17:18:13.883 回答