gpt4 book ai didi

java - NoSuchMethodError 使用 Builder 将 Avro 对象写入 HDFS

转载 作者:可可西里 更新时间:2023-11-01 14:16:59 27 4
gpt4 key购买 nike

将对象写入 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 正在使用 hadoop jar 命令在 HDFS 节点上运行。

知道这里可能出了什么问题吗?

最佳答案

org.apache.avroSchema.Parser.parse(String s, String... more)直到 Avro 1.7.5 才被引入。注意它在 1.7.4 Schema.Parser documentation 中不存在.更新您的 HDFS 节点以使用更新版本的 Avro,或者像 current 1.7 version of Schema 那样自己加入字符串。确实并使用采用单个字符串的方法:

public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse(String.join("", prevArg1, prevArg2));

编辑:我从未尝试过在 Hadoop 安装上升级 Avro,但我想如果是次要版本升级,您可能可以找到 jars 并手动替换它们。

~/dev/hadoop/hadoop-2.7.1$ find . -name '*avro*.jar'
./share/hadoop/tools/lib/avro-1.7.4.jar
./share/hadoop/httpfs/tomcat/webapps/webhdfs/WEB-INF/lib/avro-1.7.4.jar
./share/hadoop/common/lib/avro-1.7.4.jar
./share/hadoop/mapreduce/lib/avro-1.7.4.jar
./share/hadoop/kms/tomcat/webapps/kms/WEB-INF/lib/avro-1.7.4.jar

尝试下载Avro 1.7.7并用下载的 jar 替换所有找到的 jar 。我还会备份 Hadoop 安装以防出现问题。

关于java - NoSuchMethodError 使用 Builder 将 Avro 对象写入 HDFS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31687550/

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