3

こんにちは私はマッパーとレデューサーを持っているAverageScoreCalculatorと言うMapReduceタスクを持っています。問題は、アベレージスコア計算機のいくつかのフィールドを静的に初期化することです。これは、マッパーとレデューサーの両方で使用できますか?

4

3 に答える 3

3

デフォルトでは、各 map および reduce タスクは異なる JVM で実行され、ノード上の特定のインスタンスで複数の JVM が実行されている可能性があります。

次のプロパティを設定します

mapred.job.reuse.jvm.num.tasks = -1 mapreduce.tasktracker.map.tasks.maximum = 1 mapreduce.tasktracker.reduce.tasks.maximum = 1
mapreduce.job.reduce.slowstart.completedmaps
=
1

また、特定のノードで JVM を再利用する単一のマッパー/リデューサーのみが実行され、リデューサーはすべてのマッパーが処理を完了するまで起動しません。

いくつかの注意事項

  1. 上記のアプローチは MapReduce 1x リリースで機能し、効率的なアプローチではありません

  2. MapReduce 2x リリースでは、JVM の再利用はサポートされていません。

于 2012-07-16T04:51:36.923 に答える
1

map または reduce プログラムで静的フィールドが動的に更新されると、問題が発生します。スタンドアロンおよび疑似分散モードは初心者向けであり、Hadoop を学習している場合にのみ使用してください。これらのモードは、マップの主な目的である膨大な量のデータを処理している間は役に立ちません-プログラミングの練習を減らします.

ジョブがノード間で分散されると、静的情報が失われます。静的変数の使用を再検討してください。

可能であれば、マップを貼り付けてプログラムを減らし、静的フィールドの必要性を減らしてください。同じことに対するより良い解決策があります。

于 2012-07-16T09:05:38.637 に答える
0

まず、ジョブが実行される構成/モードを知る必要があります。

たとえば、ローカル (スタンドアロン) モードで実行する場合、ジョブを実行する JVM は 1 つだけです。疑似分散モードで実行すると、マシン上の複数の JVM を使用してジョブが実行されます。分散モードで実行すると、それらは異なるマシンで実行され、もちろん異なる JVM で実行されます (JVM を再利用します)。

于 2012-07-16T07:45:20.283 に答える