2014-01-06 8 views
2

Я использую апачский хруст и получили зашифрованное сообщение об ошибке от Avro:Как проследить происхождение "<init>() V" отказов в 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) 

Что такое смысл «() инициализации V» ошибка? В частности, я хотел бы исправить эту проблему и в хрусте также - это происходит только при использовании опции конвейера hp Mapredce для задания, но я не вижу, что это происходит с использованием MemPipeline.

+0

Возможный дубликат [Разница между байтовым кодом. () V vs. (Z) V] (http://stackoverflow.com/questions/14721852/difference-between-byte-code-initv-vs-initzv) –

+0

Я не думаю, что это дубликат. – LordOfThePigs

ответ

0

<init>()V относится к конструктору с 0 параметрами. Кажется, что у класса AvroKey нет такого конструктора.

Это часто случается, когда у вас есть несоответствующие версии библиотек в вашем пути к классам. В этом случае вполне вероятно, что версия Crunch на вашем пути к классам ожидает версию Avro, у которой есть конструктор no-arg, но версия, которую вы предоставляете, не имеет этого конструктора. Следовательно, время выполнения NoSuchMethodError.

1

<init>()V - внутреннее имя конструктора, который не принимает параметров.

Ошибка означает, что класс org.apache.avro.mapred.AvroKey, который вы используете, не имеет конструктора no-args.

Возможно, вы используете свое приложение с версией Avro, которая отличается от того, с чем вы ее скомпилировали. Если это так, убедитесь, что вы используете ту же самую версию для компиляции и работы.

В противном случае выясните, почему ваш код пытается получить доступ к конструктору, который не существует.

0

Чтобы добавить цвет на этом:

старой 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 на моем пути к классам.

 Смежные вопросы

  • Нет связанных вопросов^_^