2012年11月29日

MultipleOutputsを試す その3

まだ続くのかと思われる内容。
あくまで技術メモということで。

前回の最後に、
既に各ファイルのカウントは出来ているわけで、最後に全ファイルのカウントを加算したものを、
REDUCE_OUTPUT_RECORDSに設定してやれば良いのではないかと考える。
と書いた。

試した結論から書くと、それでうまくできることが分かった。
そもそもカウントされないのが正しいのだろうか、という疑問はあるが。

方法としては、Reducerのcleanupメソッドをオーバーライドして、そこに書いてやればいい。
MultipliOutputsを使用している時点で、おそらくオーバーライドしていると思うので、
そこにコードを追加する形になる。
前回は、1インクリメントしていたところを、MultipleOutputsのカウンタ分を加算するようにする。

for(Counter c : job.getCounters().getGroup(MultipleOutpus.class.getName())){
   context.getCounter(Task.Counter.class.getName(), "REDUCE_OUTPUT_RECORDS").increment(c.getValue());
}
}

のようなイメージだ。
cleanupは、Mapタスクが複数生成されていても、ただ1度しか実行されない。
なので、MultipleOutputsのカウンタを全て加算してしまうことが必要。

これなら、まだ見せられるかな〜


もはや、完全にMultipleOutputsの使い方というより、
カウンタの使い方に寄ってしまっている。。。

このシリーズはこれで完結とします。
posted by Thoughter at 21:51| Comment(0) | TrackBack(0) | Hadoop | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。