Spark + Druid Tranquility - 库版本冲突

Spark + Druid Tranquility - library version conflict

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

java.lang.NoSuchFieldError: WRITE_DURATIONS_AS_TIMESTAMPS

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

如何解决?

  1. 强制 spark 使用作业提供的 类 而不是 spark 中捆绑的 类。怎么样?
  2. 使用新版本的 jackson-databind 编译 spark
  3. 强制 Tranquility 使用旧版本。 (似乎不起作用,试图在 sbt 中排除)
  4. 还有其他方法吗?
  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:杰克逊核心 com.fasterxml.jackson.core:杰克逊注释 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)。

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

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