Apache spark 如何管理冲突的DataProc Guava、Protobuf和GRPC依赖关系

Apache spark 如何管理冲突的DataProc Guava、Protobuf和GRPC依赖关系,apache-spark,google-cloud-dataproc,google-hadoop,vitess,Apache Spark,Google Cloud Dataproc,Google Hadoop,Vitess,我正在从事scala Spark的工作,该工作需要使用java库(youtube/vitess),它依赖于较新版本的GRPC(1.01)、Guava(19.0)和Protobuf(3.0.0),而不是DataProc 1.1映像中当前提供的版本 在本地运行项目并使用maven构建时,将加载这些依赖项的正确版本,并且作业将毫无问题地运行。向DataProc提交作业时,首选这些库的DataProc版本,作业将引用无法解析的类函数 在DataProc上提交Spark作业时,建议采用什么方法确保加载依赖

我正在从事scala Spark的工作,该工作需要使用java库(youtube/vitess),它依赖于较新版本的GRPC(1.01)、Guava(19.0)和Protobuf(3.0.0),而不是DataProc 1.1映像中当前提供的版本

在本地运行项目并使用maven构建时,将加载这些依赖项的正确版本,并且作业将毫无问题地运行。向DataProc提交作业时,首选这些库的DataProc版本,作业将引用无法解析的类函数


在DataProc上提交Spark作业时,建议采用什么方法确保加载依赖项依赖项的正确版本?我无法重写此库的组件,以使用DataProc提供的这些包的旧版本。

建议的方法是将作业的所有依赖项包含到uber jar中(例如,使用插件创建)和uber jar中的依赖项类,以避免与Dataproc提供的库中的类发生冲突


作为参考,您可以看看这是如何成为Dataproc发行版的一部分的。

您很有可能通过重新定位和maven shade插件解决类路径问题。看看这个关于使用Spark重新定位guava版本的答案:再仔细考虑一下,因为这是gRPC和protobuf,还可以看看Bigtable HBase客户端如何隐藏它们的依赖关系:;不幸的是,有相当多的地方需要适当地遮光。谢谢你的建议。我已经能够使用maven shade插件来重建依赖库并消除冲突。它在DataProc上工作,这比以前更好,但我目前无法使用IDEA进行构建或开发。您能将您的解决方案作为答案发布吗?