2

假设我有一个 EMR 作业在 11 个节点集群上运行: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>

那么这 4GB 将由 4 个进程(2 个映射器和 2 个减速器)共享还是每个进程都获得 4GB?

4

1 回答 1

2

他们每人将获得 4GB。

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

那么这只是一个平衡的行为。如果您需要更多内存,则需要更少的映射器/减速器,反之亦然。

还要记住你的 CPU 有多少个内核,你不希望单个内核上有 100 个映射任务。要进行调整,最好随着时间的推移监控堆使用情况和 cpu 使用情况,以便您可以调整旋钮。

于 2012-11-07T17:04:52.757 回答