如何决定并行mapers / reducer的数量以及堆内存?

时间:2012-11-06 23:23:32

标签: hadoop mapreduce elastic-map-reduce emr

假设我在11节点集群上运行了EMR作业:m1.small主节点,而10 m1.xlarge从节点。

现在一个m1.xlarge节点有15 GB的RAM。

如何决定可以设置的并行映射器和缩减器的数量?

我的工作是内存密集型的,我希望将越来越多的堆分配给JVM。

另一个相关问题: 如果我们设置以下参数:

 <property><name>mapred.child.java.opts</name><value>-Xmx4096m</value></property>
 <property><name>mapred.job.reuse.jvm.num.tasks</name><value>1</value></property>
 <property><name>mapred.tasktracker.map.tasks.maximum</name><value>2</value></property>
 <property><name>mapred.tasktracker.reduce.tasks.maximum</name><value>2</value></property>

4个进程(2个mapper和2个reducer)共享4GB这个4GB,或者它们每个都能获得4GB吗?

1 个答案:

答案 0 :(得分:2)

他们每人将获得4gb。

您应该检查任务跟踪器和数据节点的堆设置是什么,然后您就会知道剩下多少内存分配给子级(实际的映射器/缩减器)。

然后这只是一种平衡行为。如果你需要更多内存,你需要更少的映射器/缩减器,反之亦然。

同时尝试记住CPU拥有多少内核,您不希望在单个内核上执行100个映射任务。要进行调整,最好随着时间的推移监控堆使用情况和CPU利用率,这样你就可以摆弄旋钮。