apache-spark - Spark + Druid Tranquility - 库版本冲突

标签 apache-spark sbt druid

当我使用 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: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)。

关于apache-spark - Spark + Druid Tranquility - 库版本冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34431329/

相关文章:

apache-spark - Jupyter(Windows) 无法识别 SPARK_HOME

java - 使用 Spark 上下文方法参数的并行收集不正确

scala - 使IntelliJ IDEA了解SBT依赖关系

google-cloud-platform - GCP Dataproc 已推出 Druid alpha 版。如何加载段?

amazon-ec2 - EC2上的Spark无法利用所有可用内核

scala - Spark 2.0 数据集与数据帧

scala - 在 SBT-Scalatra 项目中添加本地依赖 jar

sbt - 可以禁用 sbt 1.x 服务器吗?

hadoop - Druid hadoop批处理主管:无法将类型id 'index.hadoop'解析为SupervisorSpec的子项

hadoop - 在配置单元的非 native 表中更改表/添加列