【问题标题】:Spark2.2.1 incompatible Jackson version 2.8.8Spark2.2.1不兼容Jackson 2.8.8版
【发布时间】:2018-06-05 17:19:09
【问题描述】:

我的配置是:

  • Scala 2.11(插件 Scala IDE)
  • Eclipse Neon.3 发布 (4.6.3)
  • Windows 7 64 位

我想运行这个简单的 scala 代码 (Esempio.scala):

package it.scala

// importo packages di Spark
import org.apache.spark.SparkContext
import org.apache.spark.SparkConf


object Wordcount {
    def main(args: Array[String]) {

        val inputs: Array[String] = new Array[String](2)
        inputs(0) = "C:\\Users\\FobiDell\\Desktop\\input"
        inputs(1) = "C:\\Users\\FobiDell\\Desktop\\output"

        // oggetto SparkConf per settare i parametri sulla propria applicazione 
        // da fornire poi al cluster manager scelto (Yarn, Mesos o Standalone).
        val conf = new SparkConf()
        conf.setAppName("Smartphone Addiction")
        conf.setMaster("local")

        // oggetto SparkContext per connessione al cluster manager scelto
        val sc = new SparkContext(conf)

        //Read file and create RDD
        val rawData = sc.textFile(inputs(0))

        //convert the lines into words using flatMap operation
        val words = rawData.flatMap(line => line.split(" "))

        //count the individual words using map and reduceByKey operation
        val wordCount = words.map(word => (word, 1)).reduceByKey(_ + _)

        //Save the result
        wordCount.saveAsTextFile(inputs(1))

       //stop the spark context
       sc.stop

   }

}

所以,如果我使用 Spark-shell 一切正常,否则从 Eclipse IDE 中,如果我选择文件 (Esempio.scala) 并通过 Run->Run as->Scala 应用程序运行它,我会得到这个异常:

Exception in thread "main" java.lang.ExceptionInInitializerError
    at org.apache.spark.SparkContext.withScope(SparkContext.scala:701)
    at org.apache.spark.SparkContext.textFile(SparkContext.scala:830)
    at it.scala.Wordcount$.main(Esempio.scala:47)
    at it.scala.Wordcount.main(Esempio.scala)
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Incompatible Jackson version: 2.8.8
    at com.fasterxml.jackson.module.scala.JacksonModule$class.setupModule(JacksonModule.scala:64)
    at com.fasterxml.jackson.module.scala.DefaultScalaModule.setupModule(DefaultScalaModule.scala:19)
    at com.fasterxml.jackson.databind.ObjectMapper.registerModule(ObjectMapper.java:745)
    at org.apache.spark.rdd.RDDOperationScope$.<init>(RDDOperationScope.scala:82)
    at org.apache.spark.rdd.RDDOperationScope$.<clinit>(RDDOperationScope.scala)
    ... 4 more  

我的 pom.xml 文件是:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>it.hgfhgf.xhgfghf</groupId>
  <artifactId>progetto</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>progetto</name>
  <url>http://maven.apache.org</url>

  <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <!-- Neo4j JDBC DRIVER -->
    <dependency>
      <groupId>org.neo4j</groupId>
      <artifactId>neo4j-jdbc-driver</artifactId>
      <version>3.1.0</version>
    </dependency>

    <!-- Scala -->
    <dependency>
      <groupId>org.scala-lang</groupId>
      <artifactId>scala-library</artifactId>
      <version>2.11.11</version>
    </dependency> 

    <!-- Spark -->
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_2.11</artifactId>
      <version>2.2.1</version>
    </dependency>


  </dependencies>


</project>

我注意到 spark-2.2.1-bin-hadoop2.7/jars 目录中的 .jar 文件是:

  • jackson-core-2.6.5.jar
  • jackson-databind-2.6.5.jar
  • jackson-module-paranamer-2.6.5.jar
  • jackson-module-scala_2.11-2.6.5.jar
  • jackson-annotations-2.6.5.jar

谁能简单地向我解释一下这个异常是什么以及如何解决?

【问题讨论】:

    标签: java eclipse scala maven apache-spark


    【解决方案1】:

    Spark 2.x 包含jackson 2.6.5neo4j-jdbc-driver 使用jackson 2.8.8 版本,这里是两个不同版本的jackson 库之间的依赖冲突。 这就是您收到此 Incompatible Jackson version: 2.8.8 错误的原因。

    尝试覆盖pom.xml 中这些[以下] 模块的依赖版本,看看是否有效,

    1. 杰克逊核心
    2. 杰克逊数据绑定
    3. jackson-module-scala_2.x

    或尝试将以下依赖项添加到您的 pom.xml 中

            <dependency>
                <groupId>com.fasterxml.jackson.module</groupId>
                <artifactId>jackson-module-scala_2.11</artifactId>
                <version>2.8.8</version>
            </dependency> 
    

    【讨论】:

    • 最后一点(添加一个显式的jackson-module-scala 依赖是最好的选择,因为它可以让你同时使用任意版本的Jackson 和Scala,而不是受制于特定版本的Jackson 版本Scala 默认为。
    【解决方案2】:

    不确定这是否对使用 scala 2.12 的 sbt 项目有问题的人有所帮助。放入 jackson-module-scala_2.11 不太奏效。 jackson-module-scala 2.6.7 的单个版本具有 scala 2.12 构建

    build.sbt 中的以下代码行了

    dependencyOverrides ++= {
      Seq(
        "com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.6.7.1",
        "com.fasterxml.jackson.core" % "jackson-databind" % "2.6.7",
        "com.fasterxml.jackson.core" % "jackson-core" % "2.6.7"
      )
    }
    

    这解决了 spark 2.4.5 的问题

    【讨论】:

    • 您为我节省了大量时间!谢谢!
    【解决方案3】:

    Scala 2.1.1 版可与 Jackson 2.6.5 一起使用。使用以下内容:

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.6.5</version>
        </dependency>
    

    【讨论】:

      【解决方案4】:

      我确实遇到了与 Jackson 相同的版本冲突。除了覆盖jackson-core、jackson-databind、jackson-module-scala_2.x之外,我还在我的pom.xml中定义了jackson-annotations,解决了冲突。

      【讨论】:

        【解决方案5】:

        说明:

        当 Jackson 库的两个不同版本之间存在依赖冲突时,会发生此异常。

        为了解决冲突,maven 进行如下:

        1. 它使用最近获胜策略。
        2. 如果依赖关系在同一级别,在这种情况下,maven 将通过简单地使用在 pom 中具有更高位置的那个来解决冲突。

        这可能会导致选择错误的 Jackson 版本。

        解决方案:

        要检测冲突,您可以在 intelliJ 中使用插件Maven Helper。它将允许您使用包含有问题的 jar 的元素中的 &lt;exclusions&gt; 元素来排除冲突依赖项。

        注意: 尝试在集群模式下启动 spark Job 时也会发生此错误。在这种情况下,您必须使用 spark.driver.extraClassPathspark.executor.extraClassPath 配置和 spark-submit 显式指定 jar > 命令。

        --conf spark.driver.extraClassPath
        --conf spark.executor.extraClassPath
        

        【讨论】:

          【解决方案6】:
          Below is the combination that worked for me .
          
           aws-java-sdk-1.7.4.jar
           hadoop-aws-2.7.3.jar
           joda-time-2.9.6.jar
           hadoop-client-2.7.3-sources.jar
           hadoop-client-2.7.3.jar
           hadoop-client-2.6.0-javadoc.jar
           hadoop-client-2.6.0.jar
           jets3t-0.9.4.jar
           jackson-core-2.10.0.jar
           jackson-databind-2.8.6.jar
           jackson-module-scala_2.11-2.8.5.jar
           jackson-annotations-2.8.7.jar
          

          【讨论】:

            猜你喜欢
            • 2017-10-06
            • 2017-05-18
            • 2019-01-02
            • 1970-01-01
            • 2017-07-26
            • 2018-04-25
            • 1970-01-01
            • 1970-01-01
            • 2016-10-12
            相关资源
            最近更新 更多