在将对象写入hdfs时出现以下异常:
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.avro.Schema$Parser.parse(Ljava/lang/String;[Ljava/lang/String;)Lorg/apache/avro/Schema;
at com.blah.SomeType.<clinit>(SomeType.java:10)
它在生成的代码中引用的行是:
public class SomeType extends org.apache.avro.specific.SpecificRecordBase implements org.apache.avro.specific.SpecificRecord {
public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse ..........
我的代码中的调用是:
val someTypeBuilder = SomeType.newBuilder()
.setSomeField("some value")
// set a whole load of other fields
打电话 newBuilder()
在测试代码中根本不会导致任何问题。
jar正在hdfs节点上使用 hadoop jar
命令。
你知道这里出了什么问题吗?
1条答案
按热度按时间p1tboqfb1#
parser.parse(字符串s,字符串。。。更多)直到avro 1.7.5才推出。注意在1.7.4 schema.parser文档中没有它。要么更新hdfs节点以使用更新版本的avro,要么像当前1.7版本的schema那样连接字符串,并使用接受单个字符串的方法:
编辑:我从来没有尝试过在hadoop安装上升级avro,但是我想如果只是一个小版本的升级,你可以找到jar并手动替换它们。
尝试下载avro1.7.7并用下载的jar替换所有找到的jar。我也会备份hadoop安装,以防出错。