2015-11-19 9 views
13

Questo è un po 'strano. Quando si esegue un semplice sparkContext.parallelize(List("1","2","3"))Spark com.fasterxml.jackson.module error

sto ottenendo il seguente errore:

java.lang.VerifyError: class com.fasterxml.jackson.module.scala.ser.ScalaIteratorSerializer overrides final method withResolved.(Lcom/fasterxml/jackson/databind/BeanProperty;Lcom/fasterxml/jackson/databind/jsontype/TypeSerializer;Lcom/fasterxml/jackson/databind/JsonSerializer;)Lcom/fasterxml/jackson/databind/ser/std/AsArraySerializerBase; 

Credo che ci sia qualche conflitto nelle dipendenze di alcune delle librerie. Il mio build.sbt assomiglia a questo:

scalaVersion := "2.11.7" 

//Library repositories 
resolvers ++= Seq(
    Resolver.mavenLocal, 
    "Scala-Tools Maven2 Repository" at "http://scala-tools.org/repo-releases", 
    "Java.net repository" at "http://download.java.net/maven/2", 
    "GeoTools" at "http://download.osgeo.org/webdav/geotools", 
    "Apache" at "https://repository.apache.org/service/local/repositories/releases/content", 
    "Cloudera" at "https://repository.cloudera.com/artifactory/cloudera-repos/", 
    "OpenGeo Maven Repository" at "http://repo.opengeo.org", 
    "Typesafe" at "https://repo.typesafe.com/typesafe/releases/", 
    "Spray Repository" at "http://repo.spray.io" 
) 

//Library versions 
val geotools_version = "13.2" 
val accumulo_version = "1.6.0-cdh5.1.4" 
val hadoop_version = "2.6.0-cdh5.4.5" 
val hadoop_client_version = "2.6.0-mr1-cdh5.4.5" 
val geowave_version = "0.9.0-SNAPSHOT" 
val akka_version = "2.4.0" 
val spray_version = "1.3.3" 
val spark_version = "1.5.0" 

//Library Dependencies 
libraryDependencies ++= Seq(
    //Scala 
    "org.scala-lang" % "scala-library" % scalaVersion.value, 
    "org.scala-lang" % "scala-reflect" % scalaVersion.value, 

    //GeoTools 
    "org.geotools" % "gt-data" % geotools_version, 
    "org.geotools" % "gt-geojson" % geotools_version, 

    //Apache 
    "org.apache.accumulo" % "accumulo-core" % accumulo_version, 
    "org.apache.hadoop" % "hadoop-common" % hadoop_version, 
    "org.apache.hadoop" % "hadoop-client" % hadoop_client_version, 

    //Geowave 
    "mil.nga.giat" % "geowave-core-store" % geowave_version, 
    "mil.nga.giat" % "geowave-datastore-accumulo" % geowave_version, 
    "mil.nga.giat" % "geowave-adapter-vector" % geowave_version, 

    //Other 
    "com.typesafe" % "config" % "1.3.0", 

    //Spray - Akka 
    "com.typesafe.akka" %% "akka-actor" % akka_version, 

    "io.spray" %% "spray-can" % spray_version, 
    "io.spray" %% "spray-routing" % spray_version, 
    "io.spray" %% "spray-testkit" % spray_version % "test", 

    //Spark 
    "org.apache.spark" %% "spark-core" % spark_version, 

    "com.typesafe.play" %% "play-json" % "2.5.0-M1", 

    //Testing 
    "org.scalatest" % "scalatest_2.11" % "2.2.4" % "test" 
).map(
    _.excludeAll(ExclusionRule(organization = "org.mortbay.jetty")) 
) 

test in assembly := {} 

Eventuali indicazioni su dove cercare?

Grazie

risposta

10

In effetti, si trattava di un conflitto di dipendenza a causa di JSON-play e scintilla utilizzando diverse versioni di Jackson data-bind. Questo build.sbt sembra risolvere il problema:

scalaVersion := "2.11.7" 

//Library repositories 
resolvers ++= Seq(
    Resolver.mavenLocal, 
    "Scala-Tools Maven2 Repository" at "http://scala-tools.org/repo-releases", 
    "Java.net repository" at "http://download.java.net/maven/2", 
    "GeoTools" at "http://download.osgeo.org/webdav/geotools", 
    "Apache" at "https://repository.apache.org/service/local/repositories/releases/content", 
    "Cloudera" at "https://repository.cloudera.com/artifactory/cloudera-repos/", 
    "OpenGeo Maven Repository" at "http://repo.opengeo.org", 
    "Typesafe" at "https://repo.typesafe.com/typesafe/releases/", 
    "Spray Repository" at "http://repo.spray.io" 
) 

//Library versions 
val geotools_version = "13.2" 
val accumulo_version = "1.6.0-cdh5.1.4" 
val hadoop_version = "2.6.0-cdh5.4.5" 
val hadoop_client_version = "2.6.0-mr1-cdh5.4.5" 
val geowave_version = "0.9.0-SNAPSHOT" 
val akka_version = "2.4.0" 
val spray_version = "1.3.3" 
val spark_version = "1.5.2" 

//Library Dependencies 
libraryDependencies ++= Seq(
    //Scala 
    "org.scala-lang" % "scala-library" % scalaVersion.value, 
    "org.scala-lang" % "scala-reflect" % scalaVersion.value, 

    //GeoTools 
    "org.geotools" % "gt-data" % geotools_version, 
    "org.geotools" % "gt-geojson" % geotools_version, 

    /** ********************************************** PROVIDED ****************************************/ 
    // Apache 
    // "org.apache.accumulo" % "accumulo-core" % accumulo_version % "provided", 
    // "org.apache.hadoop" % "hadoop-common" % hadoop_version% "provided", 
    // "org.apache.hadoop" % "hadoop-client" % hadoop_client_version% "provided", 
    // 
    // //Geowave 
    // "mil.nga.giat" % "geowave-core-store" % geowave_version % "provided", 
    // "mil.nga.giat" % "geowave-datastore-accumulo" % geowave_version % "provided", 
    // "mil.nga.giat" % "geowave-adapter-vector" % geowave_version % "provided", 

    /** **********************************************************************************************/ 
    //Apache 
    "org.apache.accumulo" % "accumulo-core" % accumulo_version, 
    "org.apache.hadoop" % "hadoop-common" % hadoop_version, 
    "org.apache.hadoop" % "hadoop-client" % hadoop_client_version, 

    //Geowave 
    "mil.nga.giat" % "geowave-core-store" % geowave_version, 
    "mil.nga.giat" % "geowave-datastore-accumulo" % geowave_version, 
    "mil.nga.giat" % "geowave-adapter-vector" % geowave_version, 

    //Other 
    "com.typesafe" % "config" % "1.3.0", 

    //Spray - Akka 
    "com.typesafe.akka" %% "akka-actor" % akka_version, 

    "io.spray" %% "spray-can" % spray_version, 
    "io.spray" %% "spray-routing" % spray_version, 
    "io.spray" %% "spray-testkit" % spray_version % "test", 
    "com.typesafe.play" %% "play-json" % "2.5.0-M1" 
    exclude("com.fasterxml.jackson.core", "jackson-databind"), 

    //Spark 
    "org.apache.spark" %% "spark-core" % spark_version, 

    //Testing 
    "org.scalatest" % "scalatest_2.11" % "2.2.4" % "test" 
).map(
    _.excludeAll(
    ExclusionRule(organization = "org.mortbay.jetty") 
) 
) 

test in assembly := {} 
+0

Qualsiasi possibilità di risolvere questo usando Maven invece di sbt? – astiefel

+1

Non penso che farà molta differenza. Sotto questo aspetto la risoluzione delle dipendenze è piuttosto simile. –

+0

Sì, non ho familiarità con sbt che è tutto – astiefel

0

potrebbero verificarsi stessi problemi con l'utilizzo di primavera Boot e Spark agli stessi progetti. Per ogni evenienza - escludere le dipendenze del database di jackson da altri progetti rispetto a Spark.

+0

Sto usando Spring-Boot v1.3.1 e Spark v1.6.0 e il conflitto riguardante 'com.fasterxml.jackson.core: jackson-databind: 2.6.4' sorgono. Apparentemente, 'org.springframework.boot: spring-boot-starter-web: 1.3.1.RELEASE' richiede la v2.6.4 e Spark richiede la v2.4.4. Quello che dovevo fare era escludere la v2.6.4 e quindi dipendere esplicitamente dalla v.2.4.4. Sembra che funzioni al momento. –

19

primavera Boot 1.3.1 + Apache 1.6.0 Spark problema è stato risolto con l'aggiunta di dipendenza:

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

Non esclude da qualsiasi altra dipendenza richiesta.

+1

+1 Funziona :-). Si potrebbe voler mettere ed escludere per org.codehaus.jackson: jackson-mapper-asl' anche se ci sono 2 versioni di 'AsArraySerializerBase' nel classpath ora –

+0

grazie risolto il mio problema! +1. Ho anche postato il gradle equivalente nelle risposte se qualcuno ha bisogno di – gudthing

8

Basta aggiungere queste linee nel tuo SBT.

dependencyOverrides ++= Set(
    "com.fasterxml.jackson.core" % "jackson-databind" % "2.4.4" 
) 
+1

Questo non ha funzionato per me per Spark 1.6.1 e play-json 2.4.8 –

+1

Provare cambiando la versione di jackson-databind. Impostalo come nella tua versione play-json. (Esempio: al momento stai usando 2.4.4, quindi cambialo nel 2.4.8 nel tuo caso). –

0

Ho anche avuto lo stesso problema e la soluzione njjnex ha funzionato per me! Stavo usando Spring Boot 1.3.3 + Spark 1.6.1 e Gradle 2.9 come strumento di costruzione. Ecco la soluzione per gli utenti Gradle:

compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.4.4' 

Se si incontrano problemi, si può sempre provare una versione diversa, che si possono trovare here (vale per Maven e SBT agli utenti di)