3

デフォルトでは、EMRジョブの実行中に、インスタンスはマッパーよりも少ないリデューサを持つように設定されています。しかし、レデューサーは余分な記憶を与えられていないので、同じ量を持つことができるはずです。 (例えば、超大型の高CPUインスタンスには7つのマッパーがありますが、2つのリデューサーのみですが、マッパーとリデューサーの両方に512 MBのメモリを使用できます)。なぜEMRインスタンスにはマッパーと同じ数のレデューサーがありますか?

これはなぜ、私はマッパーと同じくらい多くのレデューサーを使用するように指定することができますか?

編集:私は間違っている量を持っていた、それは512メガバイトだ

+1

私は今理解していると思いますが、わかりません。 http://docs.amazonwebservices.com/ElasticMapReduce/latest/DeveloperGuide/HadoopMemoryDe​​fault_AMI2.htmlにリストされているメモリ量は、すべてのマッパーまたはすべてのレデューサーにわたっています。すべてが同じJVMで実行されるため、レデューサーごとではありません – dspyz

答えて

3

マッパーは、その入力ストリーム(マッパーのSTDIN)からデータを抽出し、彼らが発することは、はるかにコンパクトです。そのアウトバウンドストリーム(マッパーのSTDOUT)もキーでソートされます。したがって、レデューサーは、入荷時により小さいソートされたデータを持っています。

これは、EMRだけでなく、Hadoop MapReduceクラスタのデフォルト設定が、ジョブトラッカーが使用できるコアの数に比例して、リデューサーよりも多くのマッパーを持つことになっている理由です。

jobconfパラメータを使用して、マッパーとレデューサーの数を制御することができます。設定変数はmapred.map.tasksとmapred.reduce.tasksです。

+0

しかし、 JVMの割り当てられたメモリが同じ(512 MB)であるのはなぜですか、それはすべての還元剤に当てはまりますか? もっと重要なことに、私は減速機にもっと多くのメモリを安全に与えることができますか? – dspyz

+0

これはデフォルト設定です。異なるバージョンに戻ると、これらの数式のいくつかはベストプラクティスの結果(具体的には、マッパーとレデューサーの比率)の結果であることがわかります。参照:http://hadoop.apache.org/common/docs /r0.20.0/mapred_tutorial.html#Reducerその文書の少し下に、ヒープサイズを含むメモリ管理の議論があります。これらはすべて設定可能なため、リデューサの動作プロファイルが異なる場合は、Hadoopジョブの動作(EMRを含む)を変更できます。 –

+0

私の質問は他のすべてのメモリが使用されていますか? c1.xlargeインスタンスには7 GBが必要ですが、各タスクには512 MBしか割り当てられません。残りのメモリを使い切っているものがありますか?私がそれを4 GBと言うように変更すると、インスタンスのメモリが不足しますか?結果として他の何かが苦しんでいますか? – dspyz

関連する問題