1

最初に MapReduce ジョブのカウンター値を設定する簡単な方法がわかりませんか? また、マップ/リデュースタスク間のカウンターインクリメントアトミック操作ですか?

4

2 に答える 2

2

最初にカウンター値を設定することの意味がわからない-カウンター値を0以外で初期化することを意味します(これを行うためのユースケースは何ですか?)。

アトミック操作に関しては、カウンターはタスクごとに分離して蓄積されます。タスクが完了すると、カウンター値がグローバル合計にコミットされます (コミットされたタスクのみがコミットされるため、投機的に実行されている 2 つのタスクがある場合、成功したタスク カウンターのみがコミットされます。

于 2012-05-11T02:38:48.790 に答える
1

次のようにカウンターを作成するときに値を設定します。

  private AtomicInteger pages = new AtomicInteger(0);  // total pages fetched

またはincrCounter()、後で実行したい場合は、ループでメソッドを使用します。(最初の方が良いです。)

カウンターは、関連付けられているタスクによって維持され、定期的に tasktracker に送信されてから jobtracker に送信されるため、グローバルに集計できます。したがって、各 map タスク / reduce タスクには、カウンター変数の独自のコピーがあります。ジョブが成功すると、すべてのカウンターの合計が作成され、出力サマリーに表示されます。

于 2012-05-11T03:32:51.553 に答える