通过 MapReduce 生成 tfrecord 时出错

Error when generating tfrecord via MapReduce

我正在尝试使用 MR 作业生成 TFRecord,但遇到了一个我无法理解的错误,似乎无法找到读取列表的方法??当我尝试构建遵循 tensorflow 中的 hadoop 示例的示例时,它会抛出以下内容。任何人都可以指出一种方法吗?谢谢

2018-06-06 23:49:44,386 FATAL [main] org.apache.hadoop.mapred.YarnChild: Error running child : java.lang.NoSuchMethodError: com.google.protobuf.Descriptors$Descriptor.getOneofs()Ljava/util/List;
at com.google.protobuf.GeneratedMessageV3$FieldAccessorTable.<init>(GeneratedMessageV3.java:1704)
at org.tensorflow.example.FeatureProtos.<clinit>(FeatureProtos.java:104)
at org.tensorflow.example.Feature.internalGetFieldAccessorTable(Feature.java:109)
at com.google.protobuf.GeneratedMessageV3.getAllFieldsMutable(GeneratedMessageV3.java:124)
at com.google.protobuf.GeneratedMessageV3.getAllFields(GeneratedMessageV3.java:200)
at com.google.protobuf.TextFormat$Printer.print(TextFormat.java:272)
at com.google.protobuf.TextFormat$Printer.access0(TextFormat.java:248)
at com.google.protobuf.TextFormat.print(TextFormat.java:71)
at com.google.protobuf.TextFormat.printToString(TextFormat.java:118)
at com.google.protobuf.AbstractMessage.toString(AbstractMessage.java:106)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)

这是由于 JAVA 库兼容性问题。基本上,YARN 会加载 Protobuf(可能是 2.x)的一个版本,它与您用来构建 JAR 的版本(可能是 3.x)

不兼容

检查 YARN 日志以确定正在加载的版本,并使用相同的版本重建 JAR。