2017-05-08 19 views
19

Tôi cố gắng để chạy một ví dụ đơn giản tia lửa trong IntelliJ, nhưng tôi nhận được lỗi như thế:Spark2.1.0 phiên bản Jackson không tương thích 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) 

Tôi có cố gắng cập nhật phụ thuộc Jackson của tôi, nhưng nó có vẻ không hoạt động, tôi thực hiện việc này:

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

nhưng vẫn xuất hiện cùng thông báo lỗi, một số có thể giúp tôi khắc phục lỗi?

Đây là tia lửa mã ví dụ:

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() 
    } 
} 

Và đây là built.sbt tôi:

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" 

Trả lời

25

Spark 2.1.0 chứa com.fasterxml.jackson.core phụ thuộc như bắc cầu. Vì vậy, chúng tôi không cần phải bao gồm sau đó trong libraryDependencies.

Nhưng nếu bạn muốn thêm phiên bản com.fasterxml.jackson.core phụ thuộc khác thì bạn phải ghi đè lên chúng. Như thế này:

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" 

Vì vậy, hãy thay đổi build.sbt của bạn như trên và nó sẽ hoạt động như mong đợi.

Tôi hy vọng điều đó sẽ hữu ích!

+1

Cảm ơn! Nó hoạt động tốt cho tôi và giải quyết vấn đề đó! – Yang

+1

Cảm ơn rất nhiều. Tôi là người mới đối với SBT và Maven và đã không hài lòng với vấn đề này trong một thời gian. Giải pháp của bạn là một giải pháp hoàn hảo !! –

+1

cảm ơn, tôi đã bỏ lỡ ghi đè cho jackson-module-scala _ $ {scala.major.version} – Val

3

FYI. Đối với trường hợp của tôi, tôi đang sử dụng tia lửa và kafka-streams trong ứng dụng, trong khi kafka-suối sử dụng com.fasterxml.jackson.core 2.8.5. Thêm exclude như sau khắc phục sự cố

(gradle)

compile (group: "org.apache.kafka", name: "kafka-streams", version: "0.11.0.0"){ 
    exclude group:"com.fasterxml.jackson.core" 
} 
Các vấn đề liên quan