当我使用 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)。
如何解决这个问题?
- 强制 Spark 使用作业提供的类,而不是 Spark 中捆绑的类。怎么办?
- 使用新版本的 jackson-databind 编译 Spark
- 强制 Tranquility 使用旧版本。 (似乎不起作用,试图在 sbt 中排除)
- 还有其他方法吗?
最佳答案
您可以使用
spark.driver.extraClassPath
和spark.executor.extraClassPath
配置选项强制 Spark 使用作业提供的类,这将在前面添加任何内容您分别指定 Spark 驱动程序或 Spark 执行程序的类路径。您可以尝试针对较新版本的
jackson-databind
编译 Spark。为此,请更新 Spark 的 pom.xml 文件中的fasterxml.jackson.version
配置参数,然后按照 Spark build instructions 进行操作。 。但不能保证它会成功编译。从 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/