我创建了使用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)
如下(我创建了一个MapReduce的Avro的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);
我用的Hadoop & MRUnit从Cloudera公司和Avro公司MapRed 1.6.3 0.20.2-cdh3u2。
什么版本mrunit您使用的是和你创建驱动程序之前在配置配置'io.serializations'是可比性? – 2012-04-12 12:03:22
配置是在驱动程序之前创建的,我按照更新的语句。还添加了版本号。 – Salandur 2012-04-13 08:53:40
有更多的代码在这里失踪 - 我得到一个编译错误您MapReduceDriver构造器行:'约束不匹配:类型AvroKey不是有界参数的有效替代品类型的MapReduceDriver '。我能得到的工作序列化厂的一个简单的单元测试,但(没有MRUnit) –
2012-04-13 10:39:17