MapReduce の原理

Jun 05, 2019 pm 02:15 PM
mapreduce

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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか? Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか? Mar 17, 2025 pm 05:35 PM

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します

カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか? カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか? Mar 17, 2025 pm 05:44 PM

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか? キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか? Mar 17, 2025 pm 05:43 PM

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか? 高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか? Mar 17, 2025 pm 05:46 PM

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか? 適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか? Mar 17, 2025 pm 05:45 PM

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

See all articles