Mapper &入力、マップ出力、出力にAVROを使用するリデューサを作成しました。 MRUnitテストを作成する際に、私は、次のスタックトレースを取得:MRUnitとAVROを一緒に使用する
java.lang.NullPointerException
at org.apache.hadoop.io.serializer.SerializationFactory.getSerializer(SerializationFactory.java:73)
at org.apache.hadoop.mrunit.mock.MockOutputCollector.deepCopy(MockOutputCollector.java:74)
at org.apache.hadoop.mrunit.mock.MockOutputCollector.collect(MockOutputCollector.java:110)
at org.apache.hadoop.mrunit.mapreduce.mock.MockMapContextWrapper$MockMapContext.write(MockMapContextWrapper.java:119)
at org.apache.avro.mapreduce.AvroMapper.writePair(AvroMapper.java:22)
at com.bol.searchrank.phase.day.DayMapper.doMap(DayMapper.java:29)
at com.bol.searchrank.phase.day.DayMapper.doMap(DayMapper.java:1)
at org.apache.avro.mapreduce.AvroMapper.map(AvroMapper.java:16)
at org.apache.avro.mapreduce.AvroMapper.map(AvroMapper.java:1)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
at org.apache.hadoop.mrunit.mapreduce.MapDriver.run(MapDriver.java:200)
at org.apache.hadoop.mrunit.mapreduce.MapReduceDriver.run(MapReduceDriver.java:207)
at com.bol.searchrank.phase.day.DayMapReduceTest.shouldProduceAndCountTerms(DayMapReduceTest.java:39)
次のようにドライバが(iはアブロのMapReduce APIの実装を作成している)初期化される:
driver = new MapReduceDriver<AvroWrapper<Pair<Utf8, LiveTrackingLine>>, NullWritable, AvroKey<Utf8>, AvroValue<Product>, AvroWrapper<Pair<Utf8, Product>>, NullWritable>().withMapper(new DayMapper()).withReducer(new DayReducer());
はio.serializationと設定オブジェクトを追加します助けにはなりません。
Configuration configuration = new Configuration();
configuration.setStrings("io.serializations", new String[] {
AvroSerialization.class.getName()
});
driver = new MapReduceDriver<AvroWrapper<Pair<Utf8, LiveTrackingLine>>, NullWritable, AvroKey<Utf8>, AvroValue<Product>, AvroWrapper<Pair<Utf8, Product>>, NullWritable>().withMapper(new DayMapper()).withReducer(new DayReducer()).withConfiguration(configuration);
を私はClouderaのとアブロMapRed 1.6.3からのHadoop & MRUnit 0.20.2-cdh3u2を使用しています。
匹敵する必要がないようにK2型パラメータの制限を緩和しますか? –
ドライバの前にコンフィギュレーションが作成されました。バージョン番号も追加されました。 – Salandur
MapReduceDriverコンストラクタラインのコンパイルエラーが発生しました: 'バインドされた不一致:タイプAvroKeyはMapReduceDriver K2、V2、K3、V3> 'である。私は(MRUnitなしで)シリアライゼーション工場のシンプルな単体テストを得ることができます(MRUnitなし) –