webentwicklung-frage-antwort-db.com.de

Spark2.2.1 inkompatible Jackson-Version 2.8.8

Meine Konfiguration ist:

  • Scala 2.11 (Plugin Scala IDE)
  • Eclipse Neon.3 Release (4.6.3)
  • Windows 7 64bit

Ich möchte diesen einfachen Scala-Code (Esempio.scala) ausführen:

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

   }

}

Wenn ich also die Spark-Shell benutze, ist ansonsten alles in Ordnung. Wenn ich die Datei (Esempio.scala) auswähle und sie über Run-> Run as-> Scala-Anwendung starte, erhalte ich folgende Ausnahme:

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  

Meine pom.xml-Datei lautet:

<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>

Ich habe festgestellt, dass die .jar-Dateien im Verzeichnis spark-2.2.1-bin-hadoop2.7/jars folgende sind: 

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

Kann mir jemand auf einfache Weise erklären, was diese Ausnahme ist und wie sie gelöst werden kann?

6
Fobi

Spark 2.x enthält die jackson 2.6.5- und neo4j-jdbc-driver verwendet jackson 2.8.8-Version, hier den Abhängigkeitskonflikt zwischen zwei verschiedenen Versionen der Jackson-Bibliothek . Deshalb wird dieser Incompatible Jackson version: 2.8.8-Fehler angezeigt.

Versuchen Sie, die Abhängigkeitsversion für diese [unten] -Module in Ihrem pom.xml zu überschreiben, und prüfen Sie, ob dies funktioniert.

  1. jackson-Kern
  2. jackson-Datenbind
  3. jackson-module-scala_2.x

oder versuchen Sie, die Abhängigkeit unterhalb Ihrer pom.xml hinzuzufügen 

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

Ich bin in denselben Versionskonflikt von Jackson geraten. Neben dem Überschreiben von jackson-core, jackson-databind und jackson-module-scala_2.x habe ich in meiner pom.xml auch jackson-annotations definiert, die den Konflikt gelöst haben. 

1
Lorenz Bernauer

Scala Version 2.1.1 funktioniert mit Jackson 2.6.5. Verwenden Sie Folgendes:

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.6.5</version>
    </dependency>
1
David Urry
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
0