私はmapreduceアルゴリズムと、それが何百万ものマシンに拡張できる可能性がある方法を学びましたが、マップフェーズ後の中間キーの並べ替えがどのように拡張できるかを理解していません。
1,000,000 x 1,000,000
:中間結果の小さなキー/値ペアを相互に通信する潜在的なマシン?これがボトルネックではありませんか?
Hadoop MapReduce のボトルネックの 1 つは、クラスター上のマシン間のネットワーク帯域幅であることは事実です。ただし、各マップ フェーズからの出力は、クラスター内のすべてのマシンに送信されるわけではありません。
map 関数と reduce 関数の数は、実行しているジョブによって定義されます。各マップは、その入力データを処理し、キーをグループ化してディスクに書き込みます。ジョブは、マップからの出力に適用する削減関数の数を定義します。
各 reduce は、特定のキーのすべてのデータを確認する必要があります。そのため、ジョブに対して 1 つの reduce を実行している場合、各マップからのすべての出力を、その reduce を実行しているクラスター内のノードに送信する必要があります。reduce が実行される前に、各マップからのデータがマージされ、すべてのキーがグループ化されます。
複数のレデューサーが使用されている場合、マップは出力を分割し、リデュースごとに 1 つ作成します。パーティションは正しいリデュースに送信されます。これにより、特定のキーのすべてのデータが単一の削減によって処理されることが保証されます。
ネットワーク経由で送信する必要があるデータの量を減らすために、結合関数をマップの出力に適用できます。これには、マップからの出力に対して reduce を実行する効果があります。したがって、レデューサーに転送する必要があるデータの量を最小限に抑え、ジョブ全体の実行時間を短縮できます。