ホームページ  >  記事  >  システムによって実行される並べ替えのプロセスは何と呼ばれますか?

システムによって実行される並べ替えのプロセスは何と呼ばれますか?

青灯夜游
青灯夜游オリジナル
2021-04-25 17:10:191639ブラウズ

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 の出力 は、Combiner の入力 および出力 として使用されます。つまり、Combiner の入力と出力は同じでなければなりません。

    job.setCombinerClass を通じてコン​​バイナー処理クラスを設定できますが、MapReduce フレームワークは、このクラスのメソッドが呼び出されることを保証しません。

    注:reduce の入力と出力が同じである場合は、reduce クラスを結合器として直接使用できます。

  • ユーザー定義のパーティショナー

    Partitioner が使用される マップによって出力された に対応する処理リデューサーがどのノードであるかを決定します。デフォルトの MapReduce タスクのリデュース数は 1 です。このとき、パーティショナーは実際には影響を及ぼしませんが、リデュース数を複数に変更すると、パーティショナーはキーに対応するリデュースのノード番号を (0 から開始して) 決定します。 )。

    job.setPartitionerClass メソッドを通じて Partitioner クラスを指定できます。デフォルトでは、HashPartitioner が使用されます (キーの hashCode メソッドがデフォルトで呼び出されます)。

  • ユーザー定義グループ

    GroupingComparator は、Map によって出力された > にグループ化するために使用されます。 classは端的に言えば、key1とkey2が同じグループに属しているかどうかを判定するために使用され、同じグループであればマップの出力値を結合します。

    カスタム クラスはセルフ インターフェイス RawComparator を実装する必要があり、比較クラスは job.setGroupingComparatorClass メソッドを通じて指定できます。デフォルトでは WritableComparator が使用されますが、最終的にはキーの CompareTo メソッドが比較のために呼び出されます。

  • ユーザー定義の Sort

    SortComparator は、Map が出力した をキーソートするために使用されるキークラスです。 for key1 がどのグループに属し、key2 がどのグループに属するかが最初でどれが最後になるかを決定します。

    カスタム クラスはセルフ インターフェイス 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 サイトの他の関連記事を参照してください。

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