12

Hadoop MapReduceで複数の異なるマッパーを使用して複数の入力を行うことは可能ですか?各マッパークラスは異なる入力セットで機能しますが、それらはすべて、同じレデューサーによって消費されるキーと値のペアを放出します。ここでは、マッパーを連鎖させることについて話しているのではなく、異なるマッパーを順番にではなく並行して実行することについて話していることに注意してください。

4

2 に答える 2

13

これは結合と呼ばれます。

mapred。*パッケージでマッパーとレデューサーを使用する必要があります(古いですが、引き続きサポートされています)。新しいパッケージ(mapreduce。*)は、1つのマッパー入力のみを許可します。マップされたパッケージでは、MultipleInputsクラスを使用して結合を定義します。

MultipleInputs.addInputPath(jobConf, 
                     new Path(countsSource),       
                     SequenceFileInputFormat.class, 
                     CountMapper.class);
MultipleInputs.addInputPath(jobConf, 
                     new Path(dictionarySource), 
                     SomeOtherInputFormat.class, 
                     TranslateMapper.class);

jobConf.setJarByClass(ReportJob.class);
jobConf.setReducerClass(WriteTextReducer.class);

jobConf.setMapOutputKeyClass(Text.class);
jobConf.setMapOutputValueClass(WordInfo.class);

jobConf.setOutputKeyClass(Text.class);
jobConf.setOutputValueClass(Text.class);
于 2012-06-16T01:31:57.073 に答える
2

私はあなたの質問に質問、2つの答え、そして反勧告で答えます。

問題は、異種マップジョブを直列に実行するのではなく、並列に実行して、適切にシャッフルできる同種の結果を出力することで、どのようなメリットが得られるかということです。同じレコードを2回、1回はIDマップで渡さないようにするという考えはありますか?

最初の答えは、両方のマッパーのみのジョブを同時にスケジュールし、それぞれがフリートの半分(または入力データサイズに最も一致する比率)でスケジュールし、均一な結果を出力してから、結合を実行するレデューサーのみのジョブを実行することです。

2番目の答えは、異種入力の両方のフレーバーを認識して変換できるカスタムInputFormatを作成することです。これは非常に醜いですが、最初の提案の不要なIDマップを回避することができます。

推奨されないのは、Chrisの回答から非推奨のHadoopAPIを使用しないことです。Hadoopは非常に若いですが、APIは「新しい」フレーバーを中心に安定しています。最終的にバージョンロックインに到達します。

于 2012-06-16T02:55:27.643 に答える