gpt4 book ai didi

hadoop - 一起使用 MRUnit 和 AVRO

转载 作者:可可西里 更新时间:2023-11-01 15:41:32 25 4
gpt4 key购买 nike

我创建了一个 Mapper & Reducer,它使用 AVRO 作为输入,使用 map-output 和 reduce 输出。创建 MRUnit 测试时,我得到以下堆栈跟踪:

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)

驱动初始化如下(我已经创建了一个Avro 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 的 Hadoop & MRUnit 0.20.2-cdh3u2 和 Avro MapRed 1.6.3。

最佳答案

你得到了一个 NPE,因为 SerializationFactory 没有在 io.serializations 中找到一个可接受的实现序列化的类。

MRUnit 除了 Writable 之外还有几个与序列化相关的错误,包括 MRUNIT-45、MRUNIT-70、MRUNIT-77、MRUNIT-86,地址为 https://issues.apache.org/jira/browse/MRUNIT .这些错误涉及 conf 没有正确传递给 SerializationFactory 构造函数,或者代码需要来自所有 Writables 具有的 Key 或 Value 的默认构造函数。所有这些修复都出现在 Apache MRUnit 0.9.0-incubating 中,它将在本周某个时候发布。

Cloudera 的 0.20.2-cdh3u2 MRUnit 接近 Apache MRUnit 0.5.0-incubating。我认为即使在 0.9.0-incubating 中,您的代码可能仍然存在问题,请将您的完整代码示例通过电子邮件发送至 mrunit-user@incubator.apache.org,Apache MRUnit 项目将很乐意查看它

这将立即编译MRUNIT-99放宽对 K2 类型参数的限制,使其不必是 Comparable

关于hadoop - 一起使用 MRUnit 和 AVRO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10119616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com