如何管理冲突的DataProc Guava,Protobuf和GRPC依赖项

Smi*_*ith 5 apache-spark google-hadoop google-cloud-dataproc vitess

我正在执行scala Spark作业,该作业需要使用Java库(youtube / vitess),该库依赖于比DataProc 1.1当前提供的GRPC(1.01),Guava(19.0)和Protobuf(3.0.0)更高的版本。图片。

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

在DataProc上提交Spark作业时,如何确保加载正确版本的依赖项依赖关系的推荐方法是什么?我无法重写此库的组件,以使用DataProc提供的这些软件包的旧版本。

Igo*_*hak 3

建议的方法是将作业的所有依赖项包含到 uber jar 中(例如,使用Maven Shade插件创建),并重新定位此 uber jar 内的依赖项类,以避免与 Dataproc 提供的库中的类发生冲突。

作为参考,您可以查看如何在Cloud Storage 连接器中完成此操作,该连接器是 Dataproc 分发的一部分。