我创建了一个Elastic MapReduce作业,我正在尝试优化它的性能。
在这个时刻,我试图增加每个实例的映射器的数量。我通过mapred。tasktracker。map。tasks。max =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为每个map任务分配了800m的内存。对我来说,这似乎太过分了。我希望它是400米的顶部。
如何告诉hadoop为每个map任务使用更少的内存?
检查mapred.child.java.opts属性。默认为-Xmx200m,这意味着每个map/reduce任务有200MB的堆。
看起来EC2小有1.7 GB内存。下面是TaskTracker节点上Hadoop进程默认设置的内存。感谢"Hadoop:权威指南"
Datanode 1000mb
Tasktracker 1,000 MB
Tasktracker子map任务400mb (2 * 200mb)
Tasktracker子map任务400mb (2 * 200mb)
总容量为2800mb。
在此之上,有操作系统内存。要么选择更好的配置,要么更改默认设置。仅供参考,以下是针对不同节点的H/W配置的建议。