【问题标题】:Spark + Druid Tranquility - library version conflictSpark + Druid Tranquility - 库版本冲突
【发布时间】:2015-12-23 08:15:50
【问题描述】:

当我使用 Druid Tranquility 运行 spark 作业时出现以下错误。

java.lang.NoSuchFieldError: WRITE_DURATIONS_AS_TIMESTAMPS

Druid Tranquility 使用的 jackson-databind (2.6.1) 版本比 spark 捆绑的版本更高。 我正在使用 Druid Tranquility(0.6.4) 和 Spark(1.5.2) 的最新稳定版本。

如何解决?

  1. 强制 spark 使用作业提供的类,而不是 spark 中捆绑的类。怎么样?
  2. 用新版jackson-databind编译spark
  3. 强制宁静使用旧版本。 (好像不行,在sbt中尝试排除)
  4. 还有其他方法吗?

【问题讨论】:

    标签: apache-spark sbt druid


    【解决方案1】:
    1. 您可以通过 spark.driver.extraClassPathspark.executor.extraClassPath 配置选项强制 Spark 使用作业提供的类,这会将您在此处指定的任何内容分别添加到 Spark 驱动程序或 Spark 执行程序的类路径中。

    2. 您可以尝试针对较新版本的 jackson-databind 编译 Spark。为此,请更新 Spark 的 pom.xml 文件中的 fasterxml.jackson.version 配置参数,然后遵循 Spark build instructions。但不能保证它会编译成功。

    3. 从您的 Tranquility 应用程序中排除 jackson 也可能有效,只需确保排除以下工件:

      com.fasterxml.jackson.core:jackson-core com.fasterxml.jackson.core:jackson-annotations com.fasterxml.jackson.dataformat:jackson-dataformat-smile com.fasterxml.jackson.datatype:jackson-datatype-joda com.fasterxml.jackson.core:jackson-databind

    您可以通过运行sbt dependency-tree(使用this 插件)来验证是否排除了这些工件。

    我会先尝试 (3),然后是 (2) 和 (1)。

    【讨论】:

    • 我遇到了类似的问题,使用 --conf "spark.driver.extraClassPath=/" 设置 spark.driver.extraClassPath 修复了它。谢谢!
    【解决方案2】:

    Gian 已发出拉取请求 https://github.com/druid-io/tranquility/pull/81 并降级 Jackson 以匹配 Druid 中的版本。 并宣布下个版本的安宁会有它。

    【讨论】:

      【解决方案3】:

      在 spark-submit 中添加 --jars hibernate-validator-5.1.3.Final.jar,这可能会有所帮助

      【讨论】:

        猜你喜欢
        • 2019-06-21
        • 2016-10-17
        • 1970-01-01
        • 1970-01-01
        • 2020-03-10
        • 2018-10-20
        • 2018-05-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多