【问题标题】:Ignore Spark Cluster Own Jars忽略 Spark 集群自己的罐子
【发布时间】:2017-02-26 06:23:57
【问题描述】:

我想使用我自己的应用程序 Spark jars。更具体地说,我有一罐尚未发布的 mllib,其中包含 BisectingKMeans 的固定错误。所以,我的想法是在我的 spark 集群中使用它(在本地它工作得很好)。

我尝试了很多东西:extraclasspath、userClassPathFirst、jars 选项...许多选项不起作用。我的最后一个想法是使用 sbt 的 Shade 规则将所有 org.apache.spark.* 包更改为 shadespark.* 但是当我部署它时仍然使用集群的 spark jars。

有什么想法吗?

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

    您可以尝试使用 Maven shade 插件来重新定位冲突的包。这会为新版本的 mllib jar 创建一个单独的命名空间。所以旧版本和新版本都将在类路径中,但由于新版本有一个 替代名称,您可以显式引用较新的包。

    看看https://maven.apache.org/plugins/maven-shade-plugin/examples/class-relocation.html:

    如果 uber JAR 被重用为某个其他项目的依赖项,则直接在 uber JAR 中包含来自工件的依赖项的类可能会由于类路径上的重复类而导致类加载冲突。为了解决这个问题,可以重新定位包含在阴影工件中的类,以便创建其字节码的私有副本:

    我从视频“编写 Spark 应用程序时的 5 大错误”中得到这个想法:https://youtu.be/WyfHUNnMutg?t=23m1s

    【讨论】:

    • Grover 或 Malaska 视频的哪一部分谈到了着色插件?
    • 我尝试了这个解决方案,似乎可行,每个包都被重命名了,但仍然使用了 spark jars。一个临时的解决方案是替换 Spark 的 mllib jar(在 jars 文件夹中)并使用较新的并且它有效。 ——
    猜你喜欢
    • 2017-10-13
    • 2018-05-16
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    • 2016-09-15
    • 2021-02-05
    相关资源
    最近更新 更多