当两个类似的类存在时,spark uber jar和spark-submit --jars之间的类路径解析

Sud*_*tte 6 apache-spark

当我的spark应用程序的超级jar和我的spark-submit shell命令的--jars选项的内容包含类似的依赖项时,类加载的优先级是什么?

我从第三方库集成的角度问这个问题.如果我将--jars设置为在版本2.0中使用第三方库并且使用版本2.1组装进入此spark-submit脚本的超级jar,那么在运行时加载哪个类?

目前,我想保留我对hdfs的依赖关系,并将它们添加到spark-submit上的--jars选项中,同时希望通过一些最终用户文档要求用户将此第三方库的范围设置为'在他们的火花应用程序的maven pom文件中提供.

Hol*_*den 10

这在某种程度上由params控制:

  • spark.driver.userClassPathFirst &
  • spark.executor.userClassPathFirst

如果设置为true(default为false),则从docs:

(实验)在驱动程序中加载类时,是否优先使用用户添加的jar优先于Spark自己的jar.此功能可用于缓解Spark的依赖项和用户依赖项之间的冲突.它目前是一个实验性功能.这仅在群集模式下使用.

我写了一些控制它的代码,早期版本中有一些bug,但是如果你使用的是最近的Spark版本它应该可以工作(虽然它仍然是一个实验性功能).

  • 请注意```配置键'spark.yarn.user.classpath.first'自Spark 1.3起已被弃用,将来可能会被删除.请使用spark.{driver,executor} .userClassPathFirst而不是.`` (5认同)
  • @Holden 为什么 `userClassPathFirst` 选项被标记为“实验性”?可以撤回选择权吗?使用此选项有缺点吗?我似乎很容易陷入这样的情况:我需要比 Spark 附带的“gson”或“snakeyaml”更新版本。这对我来说似乎是一个重要的选择。 (2认同)