首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Avro中追踪"<init>()V“失败的根源?

如何在Avro中追踪"<init>()V“失败的根源?
EN

Stack Overflow用户
提问于 2014-01-06 22:15:34
回答 3查看 721关注 0票数 2

我正在使用apache crunch,从Avro得到了一条隐秘的错误消息:

代码语言:javascript
复制
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会发生这种情况。

EN

回答 3

Stack Overflow用户

发布于 2014-01-06 22:20:33

<init>()V是不带参数的构造函数的内部名称。

该错误意味着您正在使用的类org.apache.avro.mapred.AvroKey没有无参数的构造函数。

您运行应用程序时使用的Avro版本可能与编译时使用的版本不同。如果是这种情况,请确保使用相同的版本进行编译和运行。

否则,找出代码试图访问不存在的构造函数的原因。

票数 2
EN

Stack Overflow用户

发布于 2014-01-06 22:19:03

<init>()V指的是0参数构造函数。似乎AvroKey类没有这样的构造函数。

当类路径上的库版本不匹配时,通常会发生这种情况。在这种情况下,类路径上的Crunch版本可能需要具有无参数构造函数的Avro版本,但您提供的版本没有该构造函数。因此出现了运行时NoSuchMethodError

票数 0
EN

Stack Overflow用户

发布于 2014-01-06 22:29:53

要在此添加一些颜色:

旧的AvroKey类只支持一个、一个参数构造函数。

代码语言:javascript
复制
/** 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上。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20951839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档