java Spark2.2.1不兼容Jackson2.8.8版

k5hmc34c  于 2022-11-20  发布在  Java
关注(0)|答案(7)|浏览(190)

我的配置是:

  • 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-hadoop 2.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

有没有人可以简单地向我解释一下这个例外是什么,以及如何解决?

ac1kyiln

ac1kyiln1#

Spark 2.x包含了jackson 2.6.5,而neo4j-jdbc-driver使用了jackson 2.8.8版本,这里是两个不同版本的Jackson库之间的依赖冲突。这就是为什么你会得到这个Incompatible Jackson version: 2.8.8错误。
尝试覆盖pom.xml中这些[下面]模块的依赖版本,看看是否有效,
1.Jackson磁芯
1.Jackson数据绑定

  1. jackson-模块-标量_2.x
    或尝试将以下依赖项添加到您的pom.xml中
<dependency>
            <groupId>com.fasterxml.jackson.module</groupId>
            <artifactId>jackson-module-scala_2.11</artifactId>
            <version>2.8.8</version>
        </dependency>
cidc1ykv

cidc1ykv2#

不确定这是否能帮助那些在使用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"
  )
}

这修复了Spark2.4.5的问题

23c0lvtd

23c0lvtd3#

Scala版本2.1.1可以与Jackson2.6.5一起使用。请使用以下代码:

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

ercv8c1e4#

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

kq4fsx7k

kq4fsx7k5#

说明:

当Jackson库的两个不同版本之间存在依赖项冲突时,会发生此异常。
若要解决恩怨,Maven会进行下列步骤:
1.它使用的是一个最近赢的策略。
1.如果依赖关系在同一级别上,在这种情况下,maven将通过简单地使用在pom中具有更高位置的依赖关系来解决冲突。
这可能会导致选择错误的Jackson版本。

解决方案:

为了检测冲突,你可以在intelliJ中使用Maven Helper插件。它允许你在包含有问题的jar的元素中使用<exclusions>元素来排除冲突依赖。

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

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

gk7wooem6#

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

5lwkijsr7#

我得到错误不兼容的Jackson版本:2.9.9-3
我在build.sbt .build项目中添加了libraryDependencies +=“com.fasterxml.Jackson.module”%%“jackson-module-scala”%“2.14.0”(Build =〉重建项目)。使缓存无效并重新启动(file=〉使缓存无效),这对我很有效

相关问题