Spark 如何从打包的 jar 中选择 class

Spark how to prefer class from packaged jar

我正在使用 sbt assembly 插件创建一个 fat jar。我需要一些罐子,它们是默认 hadoop/spark 的一部分,但具有较新的版本。

我希望 spark worker jvm 更喜欢与我的 fat jar 文件打包在一起的版本,而不是默认的 hadoop/spark 分发版。我该怎么做?

解决方法是在提交spark应用时,在configuration(--conf选项)中设置spark.{driver,executor}.userClassPathFirst。这将首先包含来自 uber jar 的 jar,然后来自 spark 类路径。

其他解决方案是在 sbt 程序集中使用着色。并遮蔽我们 uber jar 中的 jar,其先前版本包含在 spark 中。