如何告诉hadoop分配给单个映射器作业的内存量是多少?

时间:2011-09-26 16:14:45

标签: java hadoop mapreduce amazon elastic-map-reduce

我已经创建了一个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的内存。对我来说似乎太过分了。我希望它能达到400米。

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

1 个答案:

答案 0 :(得分:3)

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

看起来EC2 small的内存为1.7 GB。以下是TaskTracker节点上Hadoop进程的默认设置的内存。感谢"Hadoop : The Definitive Guide"

Datanode 1,000 MB
Tasktracker 1,000 MB
Tasktracker子映射任务400 MB(2 * 200 MB)
Tasktracker子映射任务400 MB(2 * 200 MB)

总计为2,800MB。

除此之外,还有操作系统内存。获取更好的配置或更改默认设置。仅供参考,这是不同节点的H / W配置的recommendation