java - 从 HDFS 读取 protobuf 文件时出现 NoSuchMethodError 异常
问题描述
我正在编写一个 java 程序来计算存储在 HDFS 中的 protobuff 文件的行数并使用“hadoop -jar countLine.jar”执行该程序
但是,我得到了例外
线程“主”java.lang.NoSuchMethodError 中的异常:com.google.protobuf.CodedInputStream.shouldDiscardUnknownFields()Z 在 com.google.protobuf.GeneratedMessageV3.parseUnknownField(GeneratedMessageV3.java:290)
这只发生在某些 protobuf 文件上。具有不同架构的文件不存在此问题。
我的 protobuf 文件是 gzip 压缩的 pb.gz。
//Here is the code
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
Path path = new Path(<HDFS path to file>);
InputStream input = new GZIPInputStream(fs.open(path));
Message m;
while ((m = defaultMsg.getParserForType().parseDelimitedFrom(input)) != null) {
recordCount++;
}
如果我将文件放在本地,一切正常
InputStream input = new GZIPInputStream(new File(path_to_local_file));
Message m;
while ((m = defaultMsg.getParserForType().parseDelimitedFrom(input)) != null) {
recordCount++;
}
有没有人有想法。文件大小会导致这个问题吗?
谢谢
大卫
解决方案
谢谢@jwismar 的提示。当我从命令行运行“hadoop jar countLine.jar”时会出现问题。Hadoop 类加载器加载了 protobuf 库,它的版本低于我用来生成 java 文件的 protoc。一旦我将协议降级为较低版本并重新生成 java 文件,问题就消失了。
谢谢大卫
推荐阅读
- java - 如何复制 JButton 操作并更改其对基础对象的引用?
- android - 在 ExpandableListview 子视图的 textview 底部动态添加图片
- python - 从多个文本文件中读取一定数量的单词并保存为新文件
- android - 实现深色主题
- javascript - 日期选择器不工作(ASP.NET MVC)
- java - 重用同一个对象变量来创建多个对象
- java - 电报 Javabot。设置 webhook
- python - 如何正确使用范围 https://www.googleapis.com/auth/drive.file
- python - 如何使用卡方检验从文档中计算关键术语?
- android - 底部导航栏不显示图标或文本