MapReduce は、各リデューサーの入力がキーによってソートされていることを保証し、システムはシャッフルと呼ばれるソート プロセスを実行します。シャッフル フェーズには主に、マップ フェーズの結合、グループ、ソート、パーティションと、リデューサー フェーズのマージ ソートが含まれます。
このチュートリアルの動作環境: Windows 7 システム、Dell G3 コンピューター。
MapReduce は、各 Reducer の入力がキーによってソートされていることを保証し、システムはシャッフルと呼ばれるソート プロセスを実行します。 これは、map が出力を生成し、入力をダイジェストして削減するプロジェクト全体として理解できます。
マップ側: 各マッパータスクには、マップ タスクの出力を保存するために使用されるリング メモリ バッファがあります。しきい値に達すると、バックグラウンド スレッドがコンテンツを、マップ タスクの指定されたディレクトリにある新しいオーバーフロー書き込みファイルに書き込みます。ディスクに書き込む前に、disk.、パーティション、ソート、コンバイナーを渡す必要があります。最後のレコードが書き込まれた後、オーバーフローで書き込まれたすべてのファイルを 1 つのパーティション化されソートされたファイルにマージします。
Reduce 側: コピー フェーズ、ソート フェーズ、リデュース フェーズに分割できます。
コピー フェーズ: マップ出力ファイルは、マップ タスクを実行しているタスクトラッカーのローカル ディスクに配置され、リデュースします。 http 経由で出力を取得します ファイルのパーティションに対して、tasktracker はパーティション ファイルの Reduce タスクを実行します。マップ タスクが完了している限り、Reduce タスクは出力のコピーを開始します。
ソートフェーズ: ソートはマップ側で実行されるため、マージフェーズという用語がより適切です。このステージでは、マップ出力をマージし、その順序を維持してループします。
最後のステージは、reduce ステージです。reduce 関数は、ソートされた出力のキーごとに呼び出されます。このステージの出力は、出力ファイル システム (通常は HDFS) に直接書き込まれます。 ,
シャッフル フェーズの説明
シャッフル フェーズには主に、マップ フェーズの結合、グループ、並べ替え、分割と、リデューサー フェーズのマージ ソートが含まれます。 Map ステージでシャッフルした後、出力データは Reduce パーティションに従ってファイルに保存され、ファイルの内容は定義された並べ替えに従って並べ替えられます。 Map フェーズが完了すると ApplicationMaster に通知され、AM が Reduce にデータをプルするように通知し、プル処理中に Reduce 側でシャッフル処理を実行します。
注: Map ステージの出力データは、Map ノードを実行しているディスクに保存されます。これは一時ファイルであり、HDFS 上には存在しません。Reduce がデータをプルした後、一時ファイルは削除されます。 HDFS 上に存在する場合は削除されるため、ストレージ領域が無駄に消費されます (コピーが 3 つ生成されます)。
ユーザー定義の Combiner
Combiner を使用すると、Map ステージの中間出力結果の数を減らし、ネットワークのオーバーヘッドを削減できます。デフォルトでは、Combiner はありません。ユーザー定義の Combiner は、Reducer のサブクラスである必要があります。Map の出力
job.setCombinerClass を通じてコンバイナー処理クラスを設定できますが、MapReduce フレームワークは、このクラスのメソッドが呼び出されることを保証しません。
注:reduce の入力と出力が同じである場合は、reduce クラスを結合器として直接使用できます。
ユーザー定義のパーティショナー
Partitioner が使用される マップによって出力された
job.setPartitionerClass メソッドを通じて Partitioner クラスを指定できます。デフォルトでは、HashPartitioner が使用されます (キーの hashCode メソッドがデフォルトで呼び出されます)。
ユーザー定義グループ
GroupingComparator は、Map によって出力された
カスタム クラスはセルフ インターフェイス RawComparator を実装する必要があり、比較クラスは job.setGroupingComparatorClass メソッドを通じて指定できます。デフォルトでは WritableComparator が使用されますが、最終的にはキーの CompareTo メソッドが比較のために呼び出されます。
ユーザー定義の Sort
SortComparator は、Map が出力した
カスタム クラスはセルフ インターフェイス RawComparator を実装する必要があり、比較クラスは job.setSortComparatorClass メソッドを通じて指定できます。デフォルトでは WritableComparator が使用されますが、最終的にはキーの CompareTo メソッドが比較のために呼び出されます。
ユーザー定義 Reducer の Shuffle
Reduce 側がマップの出力データをプルする際にシャッフル (マージソート) が行われ、MapReduce フレームワークが提供されますプラグイン モードの場合 カスタマイズされた方法では、ShuffleConsumerPlugin インターフェイスを実装し、パラメータ mapreduce.job.reduce.shuffle.consumer.plugin.class を指定することで、カスタム シャッフル ルールを指定できますが、一般に、デフォルトのクラス org が直接使用されます。 .apache.hadoop.mapreduce.task.reduce.Shuffle。
プログラミング関連の知識について詳しくは、プログラミング ビデオをご覧ください。 !
以上がシステムによって実行される並べ替えのプロセスは何と呼ばれますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。