5

我正在做一个 scala Spark 作业,它需要使用 Java 库 (youtube/vitess),它依赖于较新版本的 GRPC (1.01)、Guava (19.0) 和 Protobuf (3.0.0),而不是 DataProc 1.1 目前提供的图片。

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

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

4

1 回答 1

3

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

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

于 2018-04-25T14:50:51.147 回答