0

私はまだHadoopコンバイナークラスをいつ使用するかについて直感をつかもうとしています(いくつかの記事を見ましたが、それらは私の状況では特に役に立ちませんでした)。

私の質問は、ペアの値がTextクラスの場合、コンバイナークラスを使用するのが適切ですか?たとえば、マッパーから次の出力があるとします。

fruit apple
fruit orange
fruit banana
...
veggie carrot
veggie celery
...

ここでコンバイナークラスを次のように適用できますか?

fruit apple orange banana
...
veggie carrot celery
...

レデューサーに到達する前に?

4

2 に答える 2

3

コンバイナーは通常、データに対して何らかの形式の集計、最小、最大などの操作を実行している問題に適しています。これらの値は、マップ出力のコンバイナーで計算してから、結合されたすべての出力のレデューサーで再度計算できます。 。これは、マッパーとレデューサーの間でネットワークを介してすべてのデータを転送するわけではないことを意味するため、便利です。

これで、各キーで観察された値のリストを蓄積するためにコンバイナーを導入できない理由はありません(これがあなたの例が示しているものだと思います)が、それを難し​​くするいくつかのことがあります。

<Text, Text>マッパーからペアを出力<Text, Text>し、レデューサーで使用する必要がある場合、コンバイナーは値のリストを簡単に連結して、これをテキスト値として出力できます。これで、レデューサーで同じことを実行し、すべての値を連結して1つの大きな出力を形成できます。

出力リストを並べ替えて重複排除したい場合は、問題が発生する可能性があります。コンバイナー/レデューサーロジックは、Textオブジェクトを単語にトークン化して戻し、リストを並べ替えて重複排除してから、単語のリストを再構築する必要があるためです。

あなたの質問に直接答えるために-それが適切なのはいつですか、よく私はいくつかの例を考えることができます:

  • 各キーに関連付けられた辞書式の最小値または最大値を検索する場合
  • 各キーに数百万の値があり、小さなセットの値を「ランダムに」サンプリングしたい
于 2012-04-09T00:58:16.970 に答える
0

コンバイナークラスは、可換または連想アプローチを使用する状況がある場合に使用されます。可換例:

結合タスク中にabc=cbaを実行し(a * b = d)、c、次にd、cの値をレデューサーに送信します。これで、レデューサーは2つのタスクではなく、1つのタスク、つまりa * b = d d*cを実行するだけで最終的な答えを得ることができます。コンバイナを使用する場合は、d*cのみを実行する必要があります。

同様に、連想(a + b)+ c = a +(b + c)の場合、連想(グループ化)と可換(移動)の結果は、乗算または加算の方法によって異なりません。主にコンバイナは、結合法則と可換法則に従う構造化データに使用されます。

コンバイナーの利点:

  • マップとレデューサー間のネットワークI/Oを削減します
  • Comabinerで実行の一部が発生するため、reducerのディスクI/Oが削減されます。
于 2014-08-13T08:29:48.480 に答える