1. ホーム
  2. sorting

[解決済み] Map Reduce Programmingにおけるreducerのshufflingとsortingフェーズの目的は何ですか?

2022-02-15 07:47:10

質問内容

Map Reduceプログラミングでは、reduceフェーズはシャッフル、ソート、reduceをサブパートとして持っています。ソートはコストがかかる。

Map Reduce Programmingのreducerにおけるshufflingとsortingフェーズの目的は何でしょうか?

どのように解決するのですか?

まずはじめに shuffling は、マッパーからリデューサーにデータを転送する処理なので、そうしないとリデューサーがインプット(すべてのマッパーからインプット)できないので、必要なのは当然だと思います。シャッフルは、時間を節約するために、マップ段階が終了する前でも開始することができます。マップのステータスがまだ100%でないときに、リデュースのステータスが0%より大きい(しかし33%より小さい)ことがあるのはそのためです。

Sorting は、reducer の時間を節約し、新しい reduce タスクがいつ開始されるべきかを簡単に区別できるようにします。簡単に言うと、ソートされた入力データの次のキーが前のキーと異なるときに、新しいリデュースタスクを開始するだけです。各 reduce タスクはキーと値のペアのリストを受け取りますが、key-list(value) を入力とする reduce() メソッドを呼び出さなければならないので、キーで値をグループ化しなければなりません。もし入力データがマップフェーズであらかじめ(ローカルに)ソートされ、リデュースフェーズで単にマージソートされるなら、そうするのは簡単です(リデューサーは多くのマッパーからデータを取得するので)。

Partitioning また、回答者の一人が言っていた、"Science "は、別の処理です。Mapフェーズの出力である(キー、値)ペアがどのreducerに送られるかを決定するものです。デフォルトのパーティショナーは、キーにハッシュを使用してリデュースタスクに分配しますが、それをオーバーライドして独自のカスタムパーティショナーを使用することができます。

これらの手順に関する素晴らしい情報源は、次のとおりです。 Yahooチュートリアル ( アーカイブス ).

これをうまく図式化すると次のようになります(この図ではシャッフルを"copy"と呼んでいます)。

なお shufflingsorting は、リデューサをゼロに指定した場合(setNumReduceTasks(0))には、全く実行されません。そして、MapReduceジョブはマップフェーズで停止し、マップフェーズにはいかなるソートも含まれません(したがって、マップフェーズでさえも高速になります)。

UPDATEしてください。 より正式なものをお探しなら、Tom Whiteの著書 "Hadoopもご覧ください。The Definitive Guide"」があります。 こちら が、ご質問の興味深い部分です。
Tom Whiteは2007年2月からApache Hadoopのコミッターで、Apache Software Foundationのメンバーでもあるので、かなり信憑性の高い公式なものだと思うのですが......。