MapReduce の原理

(*-*)浩
リリース: 2019-06-05 14:15:18
オリジナル
8410 人が閲覧しました

MapReduce は、大規模なデータ セット (1 TB を超える) に対する並列操作のためのプログラミング モデルです。彼らの主なアイデアである「Map」と「Reduce」という概念は、関数型プログラミング言語から借用したものであり、ベクトル プログラミング言語から借用した機能も同様です。

MapReduce の原理

プログラマは、分散並列プログラミングの知識がなくても、分散システム上で独自のプログラムを実行することが非常に容易になります。現在のソフトウェア実装では、キーと値のペアのセットを新しいキーと値のペアのセットにマップする Map 関数を指定し、マップされたすべてのキーと値のペアがそれぞれ同じセットを共有するようにする同時 Reduce 関数を指定しています。キーの。

#動作原理(推奨学習: Java ビデオ チュートリアル)

MapReduce 実行プロセス

上の写真は論文に記載されているフローチャートです。すべては先頭のユーザプログラムから始まり、ユーザプログラムはMapReduceライブラリとリンクされ、最も基本的なMap関数とReduce関数を実装します。図中の実行順序には番号が付けられています。 MapReduce の原理

1. MapReduce ライブラリは、まずユーザープログラムの入力ファイルを M 個の部分 (M はユーザー定義) に分割します (図の左側に示すように、各部分は通常 16MB ~ 64MB です)。をsplit0~4にコピーし、フォークを使用してユーザープロセスをクラスター内の他のマシンにコピーします。

2. ユーザー プログラムの 1 つのコピーはマスターと呼ばれ、他のコピーはワーカーと呼ばれます。マスターは、ジョブ (マップ ジョブまたはリデュース ジョブ) をスケジュールし、アイドル状態のワーカーに割り当てる責任を負います。ワーカーの数は指定できます。これもユーザーによって決定されます。

3. Map ジョブに割り当てられたワーカーは、対応するシャードの入力データの読み取りを開始します。Map ジョブの数は M によって決定され、1 対 1 の分割に対応します。Map ジョブは、入力データからのキーと値のペア、各キーと値のペアはパラメーターとしてマップ関数に渡され、マップ関数によって生成された中間のキーと値のペアはメモリにキャッシュされます。

4. キャッシュされた中間キーと値のペアは定期的にローカル ディスクに書き込まれ、R 領域に分割されます。R のサイズはユーザーによって定義されます。将来的には、各領域は Reduce に対応します。中間のキーと値のペアの場所はマスターに通知され、マスターはその情報を Reduce ワーカーに転送する責任を負います。

5. マスターは、担当するパーティションがどこにあるかを Reduce ジョブに割り当てられたワーカーに通知します (複数の場所が存在する必要があり、各 Map ジョブによって生成された中間のキーと値のペアがマップされる可能性があります)すべての R の異なるパーティションに)、Reduce ワーカーは、担当するすべての中間キーと値のペアを読み取った後、最初にそれらを並べ替えて、同じキーを持つキーと値のペアが集められるようにします。異なるキーが同じパーティション、つまり同じ Reduce ジョブ (パーティションの数が少ない) にマップされる可能性があるため、並べ替えが必要です。

6.reduce ワーカーは、ソートされた中間キーと値のペアを走査します。一意のキーごとに、キーと関連する値をreduce 関数に渡します。reduce 関数によって生成された出力は、出力に追加されます。このパーティションの.ファイル内にあります。

7. すべての Map および Reduce ジョブが完了すると、マスターは正規のユーザー プログラムを起動し、MapReduce 関数呼び出しはユーザー プログラムのコードを返します。

すべての実行が完了すると、MapReduce 出力は R パーティション (それぞれが Reduce ジョブに対応する) の出力ファイルに配置されます。通常、ユーザーはこれらの R ファイルをマージする必要はありませんが、別の MapReduce プログラムへの入力として使用して処理します。プロセス全体を通じて、入力データは基盤となる分散ファイル システム (GFS) から取得され、中間データはローカル ファイル システムに配置され、最終出力データは基盤となる分散ファイル システム (GFS) に書き込まれます。そして、Map/Reduce ジョブとマップ/リデュース関数の違いに注意する必要があります: マップ ジョブは入力データのシャードを処理し、各入力キーと値のペアを処理するためにマップ関数を複数回呼び出す必要がある場合があります。一方、リデュース ジョブは入力データのシャードを処理します。パーティションの中間キー 値のペア。その間、reduce 関数は異なるキーごとに 1 回呼び出され、Reduce ジョブは最終的に出力ファイルに対応します。

Java 関連の技術記事をさらに詳しく知りたい場合は、

Java 開発チュートリアル 列にアクセスして学習してください。

以上がMapReduce の原理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート