3

Mapper の出力が次のようになるサンプルの Map Reduce プログラムを作成しようとしています。

1/1/2012        15:11:46
1/1/2012        19:09:26
1/1/2012        14:01:25
1/1/2012        17:32:26
1/1/2012        17:41:00
1/1/2012        19:35:38
1/1/2012        14:28:10
1/1/2012        15:45:55

レデューサーへの入力をキーで並べ替え、次に値で並べ替えます。デフォルトでは、Hadoop フレームワークはマッパーの出力をキーのみでソートします。

このタスクを達成するにはセカンダリ ソートを使用する必要があると思いますが、これを使用する方法がわかりません。

誰でもこれで私を助けてもらえますか?

4

2 に答える 2

1

概要:

  • キーを現在のキーと値の連結にします。値を同じにしてください。
  • 2 つのキー (連結) を受け取り、日付だけを抽出して 2 つの日付の比較を返す Grouping Comparator を作成します。これにより、reduce() への 1 回の呼び出しで同じ日付のすべてのレコードが渡されます。
  • 他のすべてのジョブおよび構成設定を使用して、ジョブ ドライバーでグループ化コンパレータを指定します。

表示されている日付の値は、字句的に日付でソートされないことに注意してください。年を最初にする必要があります。

EDIT:明らかに異なる値を持つ(しかしすべて同じ日にある)キーが同じパーティションに送信されるようにする必要があるため、おそらくパーティショナーも作成する必要があると思います。

于 2012-11-21T04:45:21.563 に答える
0

TextPair ペアの例TEXT PAIRのように、カスタムの Hadoop WritableComparable を用意します。

  • Date を TextPair クラスの最初の要素として、時間を 2 番目の要素として KEY として使用します。

異なる TIME を持つ同じ Date に対して Diffrent Reducer を割り当てたくない場合は、Date Alone に基づいてパーティション分割するカスタム パーティショナーを使用します。

于 2013-10-11T13:04:30.887 に答える