2017-05-08 2 views
19

Ich versuche, eine einfache Funken Beispiel in intellij zu laufen, aber ich habe den Fehler wie folgt aus:Spark2.1.0 unvereinbar Jackson Versionen 2.7.6

Exception in thread "main" java.lang.ExceptionInInitializerError 
at org.apache.spark.SparkContext.withScope(SparkContext.scala:701) 
at org.apache.spark.SparkContext.textFile(SparkContext.scala:819) 
at spark.test$.main(test.scala:19) 
at spark.test.main(test.scala) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Incompatible Jackson version: 2.7.6 
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:730) 
at org.apache.spark.rdd.RDDOperationScope$.<init>(RDDOperationScope.scala:82) 
at org.apache.spark.rdd.RDDOperationScope$.<clinit>(RDDOperationScope.scala) 

Ich versuche, um meine Jackson Abhängigkeit zu aktualisieren, aber es scheint nicht arbeiten, ich dies tun:

libraryDependencies += "com.fasterxml.jackson.core" % "jackson-core" % "2.8.7" 
libraryDependencies += "com.fasterxml.jackson.core" % "jackson-databind" % "2.8.7" 

aber es scheint immer noch die gleichen Fehlermeldungen, kann mir jemand helfen, den Fehler zu beheben?

Hier ist Funke Beispielcode:

object test { 
def main(args: Array[String]): Unit = { 
    if (args.length < 1) { 
     System.err.println("Usage: <file>") 
     System.exit(1) 
    } 

    val conf = new SparkConf() 
    val sc = new SparkContext("local","wordcount",conf) 
    val line = sc.textFile(args(0)) 

    line.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_+_).collect().foreach(println) 

    sc.stop() 
    } 
} 

Und hier ist mein built.sbt:

name := "testSpark2" 

version := "1.0" 

scalaVersion := "2.11.8" 


libraryDependencies += "com.fasterxml.jackson.core" % "jackson-core" % "2.8.7" 
libraryDependencies += "com.fasterxml.jackson.core" % "jackson-databind" % "2.8.7" 

libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "2.1.0" 
libraryDependencies += "org.apache.spark" % "spark-mllib_2.11" % "2.1.0" 
libraryDependencies += "org.apache.spark" % "spark-repl_2.11" % "2.1.0" 
libraryDependencies += "org.apache.spark" % "spark-streaming-flume_2.10" % "2.1.0" 
libraryDependencies += "org.apache.spark" % "spark-sql_2.11" % "2.1.0" 
libraryDependencies += "org.apache.spark" % "spark-network-shuffle_2.11" % "2.1.0" 
libraryDependencies += "org.apache.spark" % "spark-streaming-kafka-0-10_2.11" % "2.1.0" 
libraryDependencies += "org.apache.spark" % "spark-hive_2.11" % "2.1.0" 
libraryDependencies += "org.apache.spark" % "spark-streaming-flume-assembly_2.11" % "2.1.0" 
libraryDependencies += "org.apache.spark" % "spark-mesos_2.11" % "2.1.0" 
libraryDependencies += "org.apache.spark" % "spark-graphx_2.11" % "2.1.0" 
libraryDependencies += "org.apache.spark" % "spark-catalyst_2.11" % "2.1.0" 
libraryDependencies += "org.apache.spark" % "spark-launcher_2.11" % "2.1.0" 

Antwort

25

Funken 2.1.0 com.fasterxml.jackson.core als transitive Abhängigkeit enthält. Also müssen wir dann nicht in libraryDependencies aufnehmen.

Aber wenn Sie eine andere com.fasterxml.jackson.core Version der Abhängigkeiten hinzufügen möchten, dann müssen Sie sie überschreiben. Wie folgt aus:

name := "testSpark2" 

version := "1.0" 

scalaVersion := "2.11.8" 


dependencyOverrides += "com.fasterxml.jackson.core" % "jackson-core" % "2.8.7" 
dependencyOverrides += "com.fasterxml.jackson.core" % "jackson-databind" % "2.8.7" 
dependencyOverrides += "com.fasterxml.jackson.module" % "jackson-module-scala_2.11" % "2.8.7" 

libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "2.1.0" 
libraryDependencies += "org.apache.spark" % "spark-mllib_2.11" % "2.1.0" 
libraryDependencies += "org.apache.spark" % "spark-repl_2.11" % "2.1.0" 
libraryDependencies += "org.apache.spark" % "spark-streaming-flume_2.11" % "2.1.0" 
libraryDependencies += "org.apache.spark" % "spark-sql_2.11" % "2.1.0" 
libraryDependencies += "org.apache.spark" % "spark-network-shuffle_2.11" % "2.1.0" 
libraryDependencies += "org.apache.spark" % "spark-streaming-kafka-0-10_2.11" % "2.1.0" 
libraryDependencies += "org.apache.spark" % "spark-hive_2.11" % "2.1.0" 
libraryDependencies += "org.apache.spark" % "spark-streaming-flume-assembly_2.11" % "2.1.0" 
libraryDependencies += "org.apache.spark" % "spark-mesos_2.11" % "2.1.0" 
libraryDependencies += "org.apache.spark" % "spark-graphx_2.11" % "2.1.0" 
libraryDependencies += "org.apache.spark" % "spark-catalyst_2.11" % "2.1.0" 
libraryDependencies += "org.apache.spark" % "spark-launcher_2.11" % "2.1.0" 

So, Ihr build.sbt wie die oben ändern und es wird erwartet funktionieren.

Ich hoffe, es hilft!

+1

Dank! Es funktioniert gut für mich und löst dieses Problem! – Yang

+1

Vielen Dank. Ich bin neu bei SBT und Maven und habe eine Weile mit diesem Problem herumgespielt. Deine Lösung war die perfekte !! –

+1

danke, mir fehlte der override für jackson-modul-scala _ $ {scala.major.version} – Val

3

FYI. Für meinen Fall verwende ich Spark und kafka-streams in der App, während Kafka-Streams com.fasterxml.jackson.core 2.8.5 verwendet. Hinzufügen exclude fixierte, wie unter der Ausgabe

(gradle)

compile (group: "org.apache.kafka", name: "kafka-streams", version: "0.11.0.0"){ 
    exclude group:"com.fasterxml.jackson.core" 
} 
Verwandte Themen