2

11ノードのクラスターでEMRジョブを実行しているとします。m1.smallマスターノードと10m1.xlargeスレーブノードです。

これで、1つのm1.xlargeノードに15GBの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 に答える