当我用Druid Tranquility运行一个火花工作时,我得到以下错误。
java.lang.NoSuchFieldError: WRITE_DURATIONS_AS_TIMESTAMPS
德鲁伊Tranquility使用更高版本的jackson-databind(2.6.1)而不是火花中捆绑的版本。 我使用最新的稳定版Druid Tranquility(0.6.4)和Spark(1.5.2)。
如何解决这个问题?
答案 0 :(得分:2)
您可以使用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:杰克逊 - 芯 com.fasterxml.jackson.core:杰克逊的注解 com.fasterxml.jackson.dataformat:杰克逊 - DATAFORMAT微笑 com.fasterxml.jackson.datatype:杰克逊 - 数据类型 - 乔达 com.fasterxml.jackson.core:杰克逊 - 数据绑定
您可以运行sbt dependency-tree
(使用this插件)来验证是否排除了这些工件。
我首先尝试(3)然后(2)和(1)。
答案 1 :(得分:0)
答案 2 :(得分:0)
在spark-submit中添加--jars hibernate-validator-5.1.3.Final.jar,这可能有帮助