我正在使用apache crunch,从Avro得到了一条隐秘的错误消息:
java.lang.NoSuchMethodError: org.apache.avro.mapred.AvroKey: method <init>()V not found
at org.apache.crunch.types.avro.AvroKeyConverter.getWrapper(AvroKeyConverter.java:57)
at org.apache.crunch.types.avro.AvroKeyConverter.outputKey(AvroKeyConverter.java:36)
at org.apache.crunch.types.avro.AvroKeyConverter.outputKey(AvroKeyConverter.java:25)
at org.apache.crunch.impl.mr.emit.MultipleOutputEmitter.emit(MultipleOutputEmitter.java:41)
at org.apache.crunch.MapFn.process(MapFn.java:34)
at org.apache.crunch.impl.mr.run.RTNode.process(RTNode.java:99)
at org.apache.crunch.impl.mr.emit.IntermediateEmitter.emit(IntermediateEmitter.java:56)
at org.apache.crunch.MapFn.process(MapFn.java:34)
at org.apache.crunch.impl.mr.run.RTNode.process(RTNode.java:99)
at org.apache.crunch.impl.mr.emit.IntermediateEmitter.emit(IntermediateEmitter.java:56)
at org.apache.crunch.MapFn.process(MapFn.java:34)
at org.apache.crunch.impl.mr.run.RTNode.process(RTNode.java:99)
at org.apache.crunch.impl.mr.run.RTNode.process(RTNode.java:110)
at org.apache.crunch.impl.mr.run.CrunchMapper.map(CrunchMapper.java:60)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:212)“init()V”错误是什么意思?具体地说,我希望在crunch中也解决这个问题--它只在使用hthe管道选项进行作业时发生,但我不认为使用MemPipeline会发生这种情况。
发布于 2014-01-06 22:20:33
<init>()V是不带参数的构造函数的内部名称。
该错误意味着您正在使用的类org.apache.avro.mapred.AvroKey没有无参数的构造函数。
您运行应用程序时使用的Avro版本可能与编译时使用的版本不同。如果是这种情况,请确保使用相同的版本进行编译和运行。
否则,找出代码试图访问不存在的构造函数的原因。
发布于 2014-01-06 22:19:03
<init>()V指的是0参数构造函数。似乎AvroKey类没有这样的构造函数。
当类路径上的库版本不匹配时,通常会发生这种情况。在这种情况下,类路径上的Crunch版本可能需要具有无参数构造函数的Avro版本,但您提供的版本没有该构造函数。因此出现了运行时NoSuchMethodError。
发布于 2014-01-06 22:29:53
要在此添加一些颜色:
旧的AvroKey类只支持一个、一个参数构造函数。
/** The wrapper of keys for jobs configured with {@link AvroJob} . */
public class AvroKey<T> extends AvroWrapper<T> {
/** Wrap a key. */
public AvroKey(T datum) { super(datum); }
}新的AvroKey类(1.4)及更高版本包含一个空的构造函数。
所以它一定是一个旧的avro实现,在我的类路径的某个地方,我的org.apache.avro.mapred.AvroKey上。
https://stackoverflow.com/questions/20951839
复制相似问题