2017-02-20 1 views
0

私はhadoopの方が新しいです。 MapReduceがクラスタ環境にある場合、MapReduceの理解に問題があります。クラスタマップでデータをマージする方法reduce environment

私は3つのノードがあり、それぞれがマップタスクを持っていると仮定します。 マシンA:

hello 1 
word 1 
data 1 
... 

マシンB:地図た後

hello 1 
xu 2 
... 

地図の出力は、ローカルのファイルとマシンに保存されます。 私の質問は、複数のマシン間でこれらのデータをマージしてからreduceステージに渡す方法です。例えば、この例でSTATGEが

hello <1, 1> 
xu 1 

答えて

1
  1. を受信低減マッパーは、入力データのすべての行の最後のセルの平均値を取得します。単語を数えないので、このマッパーを使用してローカルデータセットからそのような単語カウント出力データを取得しないようにしてください。
  2. reduce stage MRフレームワークを開始する前に、すべてのノードのすべてのマッパーの出力を、キーデータセットによってソートされた単一のグループにまとめます。最終的には、減らすジョブのセットに分割され、そこでロジックを減らすことを定義します。あなたの特定のケースについては
  3. 、私は前のポイントで述べてきたように、すべての出力は、出力の最初の単語に関連しますキーによってグループ化されます:

マシンA:こんにちは1、ワード1、データ1

マシンB:ハロー1、徐2

減速入力:データ{1}、ハロー{1,1}、ワード{1}、{2}徐

マップタスクは、出力が保存され、その後、このクラスが減速に応じてデータを分離するための責任があるPartitioner classに転送されたジョブのために行われると、このarticle

+0

ありがとうございました。したがって、すべてのマッパのすべてのノードの出力はまとめてグループ化されます。この出力は、1つのファイルまたは複数のファイルに保存されていますか、これらのファイルはどこに保存されていますか? –

+0

@shijiexuこの出力は、 "mapreduce.cluster.temp.dir"設定で定義された中間の一時的な場所に保存されます。複製のオーバーヘッドを避けるために、この場所はHDFS外です。その後、減速機はこれらの出力をピックアップし、シャッフル、ソート、ステージを減らして処理します - https://hadoop.apache.org/docs/r2.6.2/api/org/apache/hadoop/mapreduce/Reducer.html – Alex

1

での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

+0

ありがとうあなたの答え。はるかに明確です –

0

マッパー出力をローカル(あなたのケース内の単語によって)キーでソートされ、それがいくつかのチャンクに分割され、この特定のマッパー出力を持つ場合(チャンクの数が減速以下の数に等しいです。特定のレデューサーのためのキーはありません)。その後、各チャンクは対応するレデューサー(残りのマッパーからデータを受け取る)に送られ、そこで他のマッパーから来る他のチャンクとマージされ、その後すべてがレデューサーに入力されます。

関連する問題