我已经创建了一个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为每个地图任务使用更少的内存?
答案 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。