【问题标题】:Best solution for version conflict in Spark programSpark程序中版本冲突的最佳解决方案
【发布时间】:2017-10-03 02:31:21
【问题描述】:

我有一个需要多个依赖项的 Spark 程序。

一个依赖:a.jar 是集群a_2.8.jar 上的2.8 版本,但是,我需要使用它的2.9 版本,a_2.9.jar

每次启动程序,spark都会自动从集群加载a_2.8.jar,而不是加载a_2.9.jar,即使我已经通过--jars a_2.9.jar提交了这个jar。

我尝试使用spark.executor.userClassPathFirst 设置,但还有另一个问题。在我的 userClassPath 中有一个“秘密”jar 文件,比如“b.jar”,它不适用于集群,并且依赖项太多,我不知道哪个 jar 不起作用。

总结一下:

如果我使用集群默认类路径,a.jar 会发生冲突。

如果我使用userClassPathFirstb.jar 会发生冲突。 (不知道是哪个b.jar)

我希望有人能给我建议,这里最好的解决方案是什么,以最大程度地减少工作。

【问题讨论】:

    标签: scala apache-spark jar version-control


    【解决方案1】:

    使用shade plugin 创建Uber Jar 可以成为您的解决方案。 Uber jar 正在收集您打包的 jar 中的所有依赖 jar,这样我们就不会发生冲突。我们可以使用shade plugin 重新定位/重命名冲突的 jar。还有更多的优势。更多信息可以找到herehere

    【讨论】:

      【解决方案2】:

      最好的解决方案是 IMO:

      使用您的包管理器或您想要使用的任何其他工具获取依赖关系树。例如,在 maven 中,您可以使用 mvn dependency:tree see here 仔细检查哪些依赖项可能会导致类路径错误,并通过在构建文件定义中排除它们来删除它们,例如 it is pointed out here

      然后,重建您的 JAR 并再次尝试。

      【讨论】:

        猜你喜欢
        • 2014-01-12
        • 2017-03-15
        • 2015-07-02
        • 2018-10-26
        • 1970-01-01
        • 2014-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多