Spark + Druid Tranquility - 库版本冲突

时间:2015-12-23 08:15:51

标签: apache-spark sbt druid

当我用Druid Tranquility运行一个火花工作时,我得到以下错误。

java.lang.NoSuchFieldError: WRITE_DURATIONS_AS_TIMESTAMPS

德鲁伊Tranquility使用更高版本的jackson-databind(2.6.1)而不是火花中捆绑的版本。 我使用最新的稳定版Druid Tranquility(0.6.4)和Spark(1.5.2)。

如何解决这个问题?

  1. 强制spark使用作业提供的类而不是spark中捆绑的类。怎么样?
  2. 使用新版本的jackson-databind
  3. 编译spark
  4. 强制Tranquility使用旧版本。 (似乎不起作用,试图排除在sbt中)
  5. 还有其他方式吗?

3 个答案:

答案 0 :(得分:2)

  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:杰克逊 - DATAFORMAT微笑 com.fasterxml.jackson.datatype:杰克逊 - 数据类型 - 乔达 com.fasterxml.jackson.core:杰克逊 - 数据绑定

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

    我首先尝试(3)然后(2)和(1)。

答案 1 :(得分:0)

吉安已提出拉动请求https://github.com/druid-io/tranquility/pull/81降级杰克逊以匹配德鲁伊的版本。 并宣布下一个版本的宁静将有它。

答案 2 :(得分:0)

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