2

異なる入力を処理する 2 つのマッパー クラスがありますが、それらの出力は同じ形式になり、同じレデューサーに送られます。2 つのマッパー クラスの 1 つだけにコンバイナーを実装することは可能ですか?

4

3 に答える 3

1

コンバイナーを使用するように Hadoop MR を設定すると、すべてのマッパーからの出力が処理されます。特定のマッパーを指定することはできません。

おそらく、次の 2 つのオプションを検討してください。

  1. コンバイナーをすべての出力に適用します。マッパーからの出力を共通のタイプにマッピングして、リデューサーによって処理 (結合?) できるようにします。データの元のマッパーに関係なく、結合が機能するかどうかを検討してください。このアイデアを変更すると、マッパーから出力されたキーまたは値に型変数を設定し、それを結合で使用して天気を決定し、何かを行うことができます。

  2. マップ ローカル結合を使用します。マッパーの 1 つからの出力が適切に結合されることがわかっている場合は、マッパー自体の中で集計/結合を行い、出力を定期的に書き込むだけにすることができます。これがうまく機能するには、ジョブへの入力データについて十分な知識が必要です。

于 2012-07-14T23:09:39.470 に答える
0

クエリは少し不明確です。同じコンバイナを再利用して 2 つの異なるマッパーの出力を結合することについて質問されていると思います。2 つのマッパーの出力が同じであるため、可能であるはずです。

MultipleInputsクラスを使用して 1 つのジョブで 2 つのマッパーを使用することも、2 つの異なるジョブで使用することもできます。いずれの場合も、コンバイナはジョブごとに指定する必要があります。

また、

1) マッパーの o/p は、リデューサーの i/p と一致する必要があります。

2) マッパーの o/p は、コンバイナーの i/p と一致する必要があります。

3) コンバイナの i/p と o/p は同じタイプでなければなりません。

于 2012-07-15T03:41:50.967 に答える
0

最後のチェーンマッパーに適用可能なコンバイナー、サンプルコード添付

ChainMapper.addMapper(job, SalesRecordMapper.class, LongWritable.class, Text.class, Text.class, DoubleWritable.class, configuration);

ChainMapper.addMapper(job, ItemDiscountMapper.class, Text.class, DoubleWritable.class, Text.class, DoubleWritable.class, configuration);

job.setCombinerClass(DoubleReducer.class);
于 2015-10-24T13:04:20.783 に答える