【问题标题】:Classpath resolution between spark uber jar and spark-submit --jars when similar classes exist in bothspark uber jar 和 spark-submit --jars 之间的类路径解析(当两者中都存在类似的类时)
【发布时间】:2015-07-01 00:21:19
【问题描述】:

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

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

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

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

    这在某种程度上是用参数控制的:

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

    如果设置为真(default 为假),来自docs

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

    我编写了一些控制这一点的代码,早期版本中存在一些错误,但如果您使用的是最近的 Spark 版本,它应该可以工作(尽管它仍然是一个实验性功能)。

    【讨论】:

    • 感谢@holden - 我会调查一下。假设我的二进制文件不能与 Spark 附带的内容发生冲突,因为 Spark 不知道它,这仍然是要使用的参数吗? [前任。如果我的二进制文件是第 3 方,而不是 Spark 附带的 yarn 或其他开源二进制文件]
    • 请注意The configuration key 'spark.yarn.user.classpath.first' has been deprecated as of Spark 1.3 and may be removed in the future. Please use spark.{driver,executor}.userClassPathFirst instead.
    • @Holden 为什么userClassPathFirst 选项标记为“实验性”?可以撤回选择权吗?使用此选项有缺点吗?我似乎很容易遇到需要比 Spark 附带的更新版本的 gsonsnakeyaml 的情况。这对我来说似乎是一个重要的选择。
    • 这并没有帮助我解决 Spark 版本 2.3.0 上的问题,我得到了同样的错误
    • 此外,过期功能更多的是它的行为可能会改变(例如,在新 JVM 的当前主分支中,该功能的实现方式不同)。
    猜你喜欢
    • 1970-01-01
    • 2021-10-26
    • 2021-02-24
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    相关资源
    最近更新 更多