MapReduceデザインパターン

in-mapper combinerパターン

処理の概要

Mapper
↓          ローカル(各ノード)
-----------------------------------------------
↓          ネットワーク
Combiner : Mapperが生成した中間データを削減する。
↓
Reducer

Mapperから出たデータは、他ノードに、ネット越しにコピーされる。
このデータ転送がボトルネックになって、MapReduceの処理が遅くなる。
だったらMapperで、色々やったらいいんじゃね?
というイメージ。

実現方法としては、大体こんな感じ?

Map<K,V> map;
@Override
protected void setup(〜) {
   // ここに初期化処理
   map = new Map();
}

@Override
protected void map(〜) {
   // map処理
}

@Override
protected void cleanup(〜) {
   // 終了処理
   // ここで、ローカルで集約したデータを、一気に各ノードへ送る
   for (Entry entry : map.entrySet()) {
      context.write(entry.getKey(), entry.getValue());
   }
}

参考サイト

○ よくまとまってるスライド

○ 原著プレプリント(PDF)
http://www.umiacs.umd.edu/~jimmylin/MapReduce-book-final.pdf

Amazon

Hadoop MapReduce デザインパターン ―MapReduceによる大規模テキストデータ処理

Hadoop MapReduce デザインパターン ―MapReduceによる大規模テキストデータ処理

TODO

  • stripes, pairパターン
  • セカンダリソート
  • リレーショナル結合