1

コンバイナーは、レデューサーと同じクラスとほとんど同じコードを使用して作成されます。しかし、ソートとシャッフルの前、または削減の前に正確に呼び出されるのはいつですか? 並べ替えとシャッフルの前、つまりマッパーの直後の場合、どのように入力を取得します[key, list<values>]か? これはソートとシャッフルによって与えられるためです。並べ替えとシャッフルの後、つまりレデューサーの直前に呼び出された場合、コンバイナーへの出力はレデューサーのようであり[key, value]、レデューサーはどのように入力を取得します[key, list<values>]か?

4

4 に答える 4

1

コンバイナーの出力タイプは、マッパーの出力タイプと一致する必要があります。Hadoop は、コンバイナーが適用される回数、またはまったく適用されることさえ保証しません。

マッパーが拡張Mapper< K1, V1, K2, V2 >し、リデューサーが拡張
Reducer< K2, V2, K3, V3 >する場合、コンバイナーは の拡張である必要があります
Reducer< K2, V2, K2, V2 >

Combiner操作と同じマシンで適用されmapます。必ずシャッフル前。

Hadoop のドキュメントを参照:

マップ操作がそのペアを出力するとき、それらはすでにメモリ内で利用可能です。効率上の理由から、reduce-type 関数を実行するコンバイナー クラスを提供することで、この事実を利用することが理にかなっている場合があります。コンバイナが使用されている場合、マップのキーと値のペアはすぐには出力に書き込まれません。代わりに、キー値ごとに 1 つのリストで、リストに収集されます。特定の数のキーと値のペアが書き込まれると、各キーのすべての値をコンバイナの reduce メソッドに渡し、元のマップによって作成されたかのように結合操作のキーと値のペアを出力することによって、このバッファがフラッシュされます。手術。

http://wiki.apache.org/hadoop/HadoopMapReduce

于 2015-07-07T08:55:29.997 に答える
0

カスタム コンバイナを記述しても、Map Reduce フレームワークは常にコンバイナを呼び出すわけではありません。スピルの数が少なくとも 3 (デフォルト) の場合、確実にコンバイナーを呼び出します。コンバイナーを実行する必要があるスピルの数は、プロパティを介して設定できmin.num.splits.for.combineます。

于 2016-06-10T20:17:54.050 に答える