1

map()関数が 2 つしかなく、この MapReduce の分散処理の概念に特別な理由はありますreduce()か?? Hadoop フレームワークが、最初のマッピング関数の後にユーザーが望むだけ多くの関数呼び出しを行えるように汎用的に設計されなかったのはなぜですか?

4

2 に答える 2

2

特定のマップ出力に異なるReduce操作を適用したいだけの場合は、異なるファイル/ディレクトリに書き込むだけです。これにより、同じマップ出力に複数のタイプのリデューサーがあることを「シミュレート」します。でお申し込みいただけます。詳細については、こちらをご覧くださいMultipleOutputsMultipleOutputsReducer

Map と Reduce 関数を 1 つにする目的は、これをさまざまなマシンで簡単に並列化できるようにすることです。Map/Reduce ジョブは、並列化された単一のプロセスです。同じデータに複数の操作を適用しようとするのは、IMO ではあまり意味がありません。必要な場合は、上で書いたものを使用して Reducer を拡張するか、次のように記述します。他の職。

于 2013-02-19T07:38:51.367 に答える
1

Charlesの回答は、MapReduceの概念の背後にある理由を説明していますが、クラスのをオーバーライドするだけで、最初のマッピング関数の後に必要な数の関数呼び出しを行うことができます(新しいAPI)run()Mapper

  @override
  public void run(Context context) throws IOException, InterruptedException {
    setup(context);
    while (context.nextKeyValue()) {
      map(context.getCurrentKey(), context.getCurrentValue(), context);
    }
    // Call all your methods you want here
    cleanup(context);
  }

レデューサーでも同様のことができます。

于 2013-02-19T22:28:27.943 に答える