在我的工作项目中,我使用spark-submit将我的应用程序启动到纱线群集中。我对Maven项目和pom.xml的使用很新,但我似乎遇到的问题是hadoop使用的是旧版本的google protobuf(2.5.0)而不是我在工作中导入的内部依赖项(2.6。 1)。
错误在于:
java.lang.NoSuchMethodError:
com/google/protobuf/LazyStringList.getUnmodifiableView()Lcom/google/protobuf/LazyStringList;
(loaded from file:/usr/hdp/2.6.4.0-91/spark2/jars/protobuf-java-2.5.0.jar
by sun.misc.Launcher$AppClassLoader@8b6f2bf7)
called from class protobuf.com.mycompany.group.otherproject.api.JobProto$Query
由于我不太确定如何处理这样的依赖性问题,并且我无法更改使用2.6.1的内部依赖项的代码,因此我将所需的protobuf版本添加为我的项目的依赖项,如好:
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>2.6.1</version>
</dependency>
不幸的是,这还没有解决问题。当内部依赖(它自己导入2.6.1)尝试使用其原型时,就会发生冲突。
有关如何强制使用更新,正确版本的任何建议将不胜感激。
答案 0 :(得分:0)
最终,我找到了Maven阴影插件。我为公司的protobufs版本着色了阴影,将我们的服务部署为超级jar,冲突得以解决。