1

だから、これはいつも私を混乱させてきました。map-reduce がどのように機能するのか正確にはわかりません。正確な一連のイベントで迷子になっているようです。

私の理解:

  1. マスターはファイルをチャンク化し、(K1, V1) としてマッパーに渡します。
  2. マッパーはファイルを取得して Map(K1,V1)-> (K2,V2) を実行し、このデータを個々のファイルに出力します。
  3. これは私が迷子になった場所です。
    1. では、これらの個々のファイルはどのように結合されるのでしょうか? 各ファイルでキーが繰り返される場合はどうなりますか?
    2. これを組み合わせるのは誰ですか?それはマスターですか?このステップですべてのファイルがマスターに入ると、大きなボトルネックになりませんか? すべてが 1 つのファイルに結合されますか? ファイルは再チャンクされ、レデューサーに渡されますか?
    3. または、代わりにすべてのファイルがレデューサーに直接送られる場合、プロセスの最後に (K3, V3) ファイルで繰り返される K3 はどうなりますか? それらはどのように組み合わされていますか?別の Map-Reduce フェーズはありますか? その場合、新しい操作を作成する必要がありますか: Map(K3,V3)->(K4,V4), Reduce(K4,V4)->(K3,V3)

要約すると、ファイルがどのように適切に再結合され、マップ削減ロジックが失敗するかがわかりません。

4

2 に答える 2

1

この回答を読む前に、少し時間をとってマージソート (分割統治法) について読んでください。

フレームワークによって舞台裏で行われているアクションの完全なセットを次に示します。

  1. クライアントが mapreduce ジョブを送信します。ジョブの送信が行われている間

    • FileInputFormat は、ファイルを分割する方法を決定します (分割 = 分割サイズに応じて 1 つ以上の hdfs ブロック)。
  2. JobTracker は、スプリットが配置されている場所を把握し、スプリットの近くにマッパーを生成します。局所性の優先度は (1. データ ローカル 、2. ラック ローカル 、3. ネットワーク ホップ ローカル ) です。

  3. マッパーはデータ (FileInputFormat によって提供されるレコード リーダー) を読み取り、k1->v1 を生成します。

  4. このデータは、マッパーが実行されているローカルファイルシステムにローカルに保存されます。ここでのトリックは、ローカルファイルシステムに保存されたデータが「ソート」され、パーティションに保存されることです (リデューサーの数に等しい)

    • コンバイナーが有効になっている場合、ディスクに保存する前に、特定のキーについて、コンバイナー ロジックに基づいて値がマージされます (ほとんどは reduce と同じです)。データは並べ替えられてディスクに保存されます。

5. 各レデューサーは、対応するパーティションからマッパーからデータをプルします (レデューサーによってプルされたすべてのデータがソートされていることを忘れないでください)。

{
k1->v1
k1->v2 
K2->v3
}

Reducer は、マッパーからプルされたすべてのソート済みファイルへのファイル ポインターを開き、それらをマージします。(マージ中にグループとソートコンパレータが使用されます)ソートされたファイルからマージが行われているため、リデューサーの出力はソートされ、hdfsに保存されます

このステップは、マージソートの「マージステップ」に多少似ています

http://bytepadding.com/big-data/map-reduce/understanding-map-reduce-the-missing-guide/をご覧ください。

于 2015-04-27T20:09:45.347 に答える