2016-10-06 1 views
0

私はMapReduceフレームワークについてかなり混乱しています。私はそれについてさまざまな情報源からの読書を混乱させている。ところで、これは私のMapReduceジョブのアイデアですシャッフルフェーズとコンバイナフェーズの違いは何ですか?

1. Map()-->emit <key,value> 
2. Partitioner (OPTIONAL) --> divide 
    intermediate output from mapper and assign them to different 
    reducers 
3. Shuffle phase used to make: <key,listofvalues>  
4. Combiner, component used like a minireducer wich perform some 
    operations on datas and then pass those data to the reducer. 
    Combiner is on local not HDFS, saving space and time.  
5. Reducer, get the data from the combiner, perform further 
    operation(probably the same as the combiner) then release the 
    output.  
6. We will have n outputs parts, where n is the number 
    of reducers 

これは基本的に正しいですか?私はコンバイナがシャッフルフェーズであることを示すいくつかの情報源を見つけました。基本的に各レコードをキーでグループ化しています。

+0

メッセージ内の数字は、各操作が行われる順序を表していますか? – Amit

+0

はい、私の心の中ではい。 – rollotommasi

+0

クール、とにかく、私は以下の答えは、ポイントを説明すると思います。 – Amit

答えて

0

各ノード内のマップタスクの出力のみで動作するミニレデューサフェーズそれを実際の減速機に放出する。

古典的なWordCountの例では、マップフェーズの出力はマップタスクが処理する各単語の(単語、1)になります。コンバイナがなけれ

を「彼女はインドで大 市の郊外に大きなガレージと大きな家に住んでいた」処理する入力が

であると仮定しましょう、マップフェーズが発するでしょう(大、1)を3回、(a、1)を3回、(中、1)を2回繰り返します。しかし、コンバイナが使用されるとき、マップフェーズは(大、3)、(a、3)および(in、2)を放出する。これらの単語のそれぞれの出現は、フェーズを減らすために出力を出す前に、マップフェーズ内でローカルに集約されることに注意してください。 Combinerを使用するユースケースでは、ローカル集約のためにマップからのネットワークトラフィックが最小限に抑えられるように最適化します。

シャッフルフェーズでは、さまざまなマップフェーズからの出力が正しいレデューサーフェーズにリダイレクトされます。これは、フレームワークによって内部的に処理されます。パーティショナーを使用する場合は、それに応じて入力をシャッフルして減らすと便利です。

+0

このチュートリアルを見てみましょう:[link] https://developer.yahoo.com/hadoop/tutorial/module4.html#functionality [/ link] しかし、どのようにコンバイナがシャッフルフェーズはまだ実行されていませんか?つまり、値のリストの値を合計するには、シャッフルフェーズの後に滞在する必要があります。 IMHO、コンバイナは、入力として受け取るデータの種類に応じて、シャッフルフェーズ前または直後に動作できます。たとえば、wordcountでは、コンバイナは各パーティションの合計を実行し、次にこれがhdfsの実際の減速機に移動します。私が何を意味するのか理解する?ありがとう – rollotommasi

0

私はコンバイナがシャッフルとソートフェーズの一部だとは思わない。 コンバイナ自体は、ジョブライフサイクルのフェーズの1つ(オプション)です。

これらのフェーズのパイプラインは次のように可能性があり

: マップ - >パーティション - >コンバイナ(オプション) - ソート>シャッフルと - >削減

これらの相のうち、地図、パーティションおよびコンバイナ同じノード上で動作します。 Hadoopは、Reduce Phaseを実行するノードを動的に選択し、可能な限り最良の方法でリソースの可用性とアクセス可能性に依存します。 シャッフルと並べ替え、重要な中間レベルのフェーズはマップノードと縮小ノードで機能します。

クライアントがジョブをサブミットすると、ノードの両端にブロックの形で格納されている入力ファイルに対してマップフェーズが開始されます。 マッパーはファイルの各行を1つずつ処理し、結果を100MBのメモリバッファ(各マッパーにローカルメモリ)に格納します。このバッファが一定のしきい値(デフォルトでは80%)まで満たされると、このバッファがソートされてディスクにファイルとして保存されます。各マッパーは、複数の中間ソートされた分割またはファイルを生成できます。 Mapperがブロックのすべての行で処理されると、そのようなすべての分割が一緒にマージされ(単一のファイルを形成する)、ソートされ(キーに基づいて)、この単一のファイルに対してCombinerフェーズが開始されます。 Parititionフェーズがない場合、中間ファイルは1つのみ生成されますが、Parititioningの場合、開発者ロジックに応じて複数のファイルが生成されます。下の画像Oreilly Hadoop:The Definitive guideは、この概念をより詳しく理解するのに役立ちます。

enter image description here

その後、Hadoopのコピーは、キーの値に応じて、減速ノードにマッパーの各ノードからファイルをマージ。つまり、同じキーのすべてのレコードが同じReducerノードにコピーされます。

私はSSとReduce Phaseの作業について深く知っているかもしれないので、これらのトピックについて詳しくは説明しません。

また、詳細については、Oreilly Hadoop:The Definitive guideをお読みください。 Hadoopの素晴らしい本。

+0

パーティションはオプションではありません。デフォルトのパーティションを上書きすることはオプションです。 – vefthym

0

コンバイナは、シャフリングフェーズに全く似ていません。あなたがシャフリングと言っていることは間違っています。これはあなたの混乱の根源です。

シャッフルはマップからキーをコピーするだけで、キーの生成とは関係ありません。これはリデューサーの第1段階であり、他の2つはソーティングされ、次に削減されます。

を組み合わせることは、各マッパーの出力に対して、ローカルで減速器を実行するようなものです。それは基本的にレデューサー(レデューサークラスを拡張します)のように機能します。つまり、レデューサーのように、マッパーが同じキーに対して発行したローカル値をグループ化します。

パーティション分割は実際にマップ出力キーを特定の削減タスクに割り当てますが、オプションではありません。デフォルトのHashPartitionerを独自の実装でオーバーライドすることはオプションです。

私はこの答えを最小限に抑えようとしましたが、Azimが示唆しているように、Hadoop:The Definitive Guide、Azimが示唆しているような書籍、および関連するものの詳細はthis postにあります。

関連する問題