Googleのセクション5.3から paper MapReduceの説明。
「Map関数は、テキスト行から10バイトの並べ替えキーを抽出し、キーと元のテキスト行を中間のキーと値のペアとして出力します。組み込みのIdentity関数をReduce演算子として使用しました。この関数は中間のキー/値のペアは出力キー/値のペアとして変更されていません。最後にソートされた出力が書き込まれます... "
実際の並べ替えがどのように行われるのかわかりません。私が理解している限り、Map関数はキーと値のペアを抽出し、Reduce関数はソートされたデータを何らかの形で出力します。 「ソーティングキー」とは?
並べ替えは、Googleのランタイムの実装の詳細と追加機能に依存しています。セクション4.2を参照してください。
特定のパーティション内で、中間キー/値ペアがキーの昇順で処理されることを保証します。この順序の保証により、パーティションごとに並べ替えられた出力ファイルを簡単に生成できます。これは、出力ファイル形式がキーによる効率的なランダムアクセスルックアップをサポートする必要がある場合、または出力のユーザーがデータを並べ替えることが便利である場合に便利です。
このシステムでは、任意のパーティショニングスキームも可能です(セクション4.1で説明)。分類システムはこのスキームを使用します:
パーティショニング機能は、キーの最初のバイトを使用して、キーをR個のいずれかに分離します。
したがって、Reduce関数が各パーティションで実行されると、データは変更されませんが、出力は正しい順序であることが保証されます(おそらく、これの実装について特別なことは何もありません-ある種の単純なローカルの種類にすぎません)。
パーティションを並べ替えたら、パーティションを作成するために使用された最初のバイトの順序でパーティションを連結するだけで、完全に並べ替えられたリストを作成できます。
(私は、「ソートキー」を、キーがソートされたときに値が少なくともソートされた正しい順序であるように設計された値の要約と見なしています。少なくとも合理的な近似値です。単純に、文字列は、大まかなソートキーを作成するのに十分です)
MapReduceアルゴリズムに関連する概念を説明する教授の このYouTubeビデオ をご覧ください。残念ながら、すべてのコードはSchemeに含まれているため、読みやすさは最高ではありませんが、彼は何が起こっているのかをうまく説明しています。
基本的に、MapReduceにはこれらの2つのステップだけではありません。こんなふうになります:
並べ替えの手順は基本的にそこにあるので、Reduce操作を分散型の並列方式で実行することができます。これは、すべてを順次実行する代わりに、Reduceタスク全体を単一のシステムで処理する必要があり、目的を達成できません。 。