2012-05-10 2 views

答えて

2

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

アトミック演算の場合、カウンタはタスクごとに孤立して累積されます。タスクが完了すると、カウンタ値はグローバルな合計にコミットされます(コミットされたタスクのみがコミットされるため、投機的に実行される2つのタスクがある場合は、成功したタスクカウンタのみがコミットされます)。

+0

はい、0以外は私が欲しいものです。 – kee

+1

あなたがこれをやりたいのはまだ分かりませんが、マッパー/レデューサーの設定方法では、コンテキストからタスク番号を取り出し、タスクIDが0のときにカウンタ値を何らかの値に初期化することができますつまり、一連の最初のマッパー/レデューサー) –

1

カウンターのように:。

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

OR後でいくつかの時点でそれをしたい場合はループ内でincrCounter()メソッドを使用し (。最初のものが優れている)

カウンターを持つ彼らタスクによって維持されていますが関連付けられており、定期的に が送信されますsktracker、次にjobtrackerに渡されるので、それらをグローバルに集約することができます。したがって、各タスクのタスク/リダクションタスクは独自のカウンタ変数のコピーを持ちます。ジョブが成功すると、すべてのカウンターの合計が作成され、出力サマリで提供されます。

+0

ここでAtomicIntegerを使用する理由はわかりません。演算を行うタスク内にスレッドが1つしかないので、 –

+0

はOPの単なる例です。ユースケース –