でのMapReduceについての詳細を参照してください。たとえば、あなたのケースでは、2つの減速機を実行している3台のマシンがあります。次に、2つの減速機のマップ出力を分割するのは、パーティショナークラスのgetpartition()メソッドです.Ex-> hello 1 // reducer 1 word 1// reducer 2 data 1 // reducer 1
これで、2つの分離ファイルがそれぞれの減速機ごとに作成されます。各マッパーノードで作成されるこれらのファイルのどれも、マップ出力に各減速機のデータが含まれているかどうかによって異なります。これらすべてのファイルが依然としてマッパー・ノード上にあることを覚えておいてください。
この後WritableComapartorは、2つのファイルのそれぞれのデータをソートする責任を負うクラスが呼び出され、それらをグループ化する役割も果たします。これが行われると、結果ファイルはクラスタ内の各ノードに送信される準備が整います。
すべてのマップノードが結果の出力ファイルをそれぞれのレデューサーノードで送信し、レジューサーですべてのマッパーから受信したファイルをマージしてEx - >ソートするので、2つのマッパー2つの減速器と1つのマッパが減速器1と減速器2の両方のデータを生成する。他の1つは減速器1の出力ファイルのみを生成し、減速器1は2つのファイルを取得し、減速器2は1つのファイルを生成する。
これらのファイルに対してリジェクタが実行され、最終出力が生成されます。
Refer here for more detail about data flow from mapper to reducer
ありがとうございました。したがって、すべてのマッパのすべてのノードの出力はまとめてグループ化されます。この出力は、1つのファイルまたは複数のファイルに保存されていますか、これらのファイルはどこに保存されていますか? –
@shijiexuこの出力は、 "mapreduce.cluster.temp.dir"設定で定義された中間の一時的な場所に保存されます。複製のオーバーヘッドを避けるために、この場所はHDFS外です。その後、減速機はこれらの出力をピックアップし、シャッフル、ソート、ステージを減らして処理します - https://hadoop.apache.org/docs/r2.6.2/api/org/apache/hadoop/mapreduce/Reducer.html – Alex