My favorites | Sign in
Project Home Downloads Wiki Issues Source
READ-ONLY: This project has been archived. For more information see this post.
Search
for
ProgrammingGuideMergeReducer  
SSS Mapreduce Programming Guide - MergeReducer
ja, en
Updated Feb 25, 2013

MergeReducer

SSS Mapreduceでは2つのTupleGroupからキーの同じものをマージする処理を行う機能があります。 この機能を「MergeReducer」と呼びます。

MergeReducerではまず、入力を2つ持つReducerを作成します。

public class MergeReducer extends Reducer {
 public void reduce(Context context,
                    PackableString key1, Iterable<PackableInt> values1,
                    PackableString key2, Iterable<PackableInt> values2,
                    Output<PackableString, PackableInt> output) {
   // 処理内容…
 }
}

このときキーの型は同じでなければなりません。 SSS Mapreduceは2つTupleGroupの中でキーが同じものをまとめ、reduceメソッドを呼び出します。 ユーザはreduceメソッドの中で2つのTupleGroupの値をマージする処理を記述することができます。

このとき、2つキーのキーの値は同じになります。 どちらか片方は不要なのですが、SSS Mapreduceが引数の情報からReducerの入力/出力の型を取得する関係上必要となっています。

次に、Job.Builderでジョブを作成する際にaddInputを2回呼び出し、2つの入力を指定します。

    JobEngine engine = new JobEngine(client);
    try {
      GroupID input1 = ...;
      GroupID input2 = ...;
      GroupID output = GroupID.createRandom(engine);

      engine.getJobBuilder("MergeReducer", MergeReducer.class)
        .addInput(input1)
        .addInput(input2)
        .addOutput(output).build();

MergeReducerでは片方のTupleGroupにのみ存在するキーに対してはreduceメソッドを呼びだしません。 片方のTupleGroupにのみ存在するキーに対してもreduceメソッドを呼び出すようにするには、Configurationにて"marge_reducer.handle_one_side_only"をtrueに設定します。

      Job.Builder jb = engine.getJobBuilder("MergeReducer", MergeReducer.class)
        .addInput(input1)
        .addInput(input2)
        .addOutput(output);
      jb.getConfiguration().setBoolean("marge_reducer.handle_one_side_only", true);
      jb.build();
Powered by Google Project Hosting