【问题标题】:com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.5.3com.fasterxml.jackson.databind.JsonMappingException: Jackson 版本太旧 2.5.3
【发布时间】:2016-12-13 16:06:39
【问题描述】:

我的操作系统是 OS X 10.11.6。 我正在运行 Spark 2.0、Zeppelin 0.6、Scala 2.11

当我在 Zeppelin 中运行此代码时,我从 Jackson 那里得到一个异常。 当我在 spark-shell 中运行此代码时 - 没有例外。

val filestream = ssc.textFileStream("/Users/davidlaxer/first-edition/ch06")

com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.5.3
  at com.fasterxml.jackson.module.scala.JacksonModule$class.setupModule(JacksonModule.scala:56)
  at com.fasterxml.jackson.module.scala.DefaultScalaModule.setupModule(DefaultScalaModule.scala:19)
  at com.fasterxml.jackson.databind.ObjectMapper.registerModule(ObjectMapper.java:651)
  at org.apache.spark.rdd.RDDOperationScope$.<init>(RDDOperationScope.scala:82)
  at org.apache.spark.rdd.RDDOperationScope$.<clinit>(RDDOperationScope.scala)
  at org.apache.spark.streaming.StreamingContext.withNamedScope(StreamingContext.scala:273)
  at org.apache.spark.streaming.StreamingContext.textFileStream(StreamingContext.scala:413)
  ... 51 elided

spark-core 中的 dependency-reduced-pom.xml 显示版本 2.6.5

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

Maven的版本是:

David-Laxers-MacBook-Pro:2.5.3 davidlaxer$ mvn -version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T08:41:47-08:00)
Maven home: /opt/local/share/java/maven3
Java version: 1.8.0_05, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.11.6", arch: "x86_64", family: "mac"

Java的版本是:

David-Laxers-MacBook-Pro:2.5.3 davidlaxer$ java -version
java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)

Zeppelin 使用以下参数构建:

$ mvn clean package -Pspark-2.0 -Phadoop-2.4 -Pyarn -Ppyspark -Psparkr -Pscala-2.11 -DskipTests

在 Zeppelin 和 Spark 中生成依赖关系树将所有 jackson-databind 引用显示为 2.6.5。

$ mvn dependency:tree -Dverbose 
shows [INFO] +- com.fasterxml.jackson.core:jackson-databind:jar:2.6.5:compile

我尝试删除 ~/.m2/repository/com/fasterxml 并重建 Spark 和 Zeppelin。

这是我的 $PATH:

David-Laxers-MacBook-Pro:~ davidlaxer$ !e
echo $PATH
/Users/davidlaxer/.sdkman/candidates/springboot/current/bin:/Users/davidlaxer/.jenv/shims:/Users/davidlaxer/.jenv/bin:/Developer/NVIDIA/CUDA-6.5/bin:/usr/local/lib/erlang/erts-5.9.1/bin:/users/davidlaxer/anaconda/bin:/users/davidlaxer/anaconda/bin/bin:/opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin:/opt/local/bin:/opt/local/sbin:/usr/local/lib/erlang/erts-5.9.1/bin:/users/davidlaxer/anaconda/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/CrossPack-AVR/bin:/usr/local/git/bin:/usr/texbin::/opt/local/bin/scala/bin::/usr/local/hadoop/bin:/usr/local/hadoop/sbin:/Users/davidlaxer/pig-0.13.0-src/bin:/Users/davidlaxer/pig-0.13.0-src/sbin:/Users/davidlaxer/Downloads/apache-maven-3.2.1/bin:/Users/davidlaxer/anaconda/bin/bin::/usr/local/hadoop/bin:/usr/local/hadoop/sbin:/Users/davidlaxer/.rvm/bin:/Library/Frameworks/JRuby.framework/Versions/Current/bin:/usr/local/gradle-source-build/bin:/Users/davidlaxer/bin:/Users/davidlaxer/storm/bin:/usr/bin:/usr/sbin:/Users/davidlaxer/spark/bin:/Library/PostgreSQL/9.4/bin:/usr/local/mysql/bin

知道为什么我要选择 2.5.3 版吗?

【问题讨论】:

    标签: apache-spark maven-2 spark-streaming apache-zeppelin fasterxml


    【解决方案1】:

    将 './zeppelin-zengine/target/lib/' 和 './zeppelin-server/target/lib/' 中的 jackson jars(2.5.x 版本)替换为以下版本即可解决问题。

    jackson-databind-2.6.5.jar 杰克逊核心2.6.5.jar jackson-annotations-2.6.5.jar

    【讨论】:

    • 好的。我会试试看。同时我恢复到 Spark 1.6 和 Zeppelin 0.56。我得到:com.fasterxml.jackson.databind.JsonMappingException:在 [Source: {"id":"0" ,"name":"文本文件流"};行:1,列:1]这是同样的问题吗?
    • 是什么导致 mvn 安装旧的 jar?
    • 替换完两个目录下的.jar文件后,重新运行mvn命令?例如。 mvn clean package -Pspark-1.6 -Phadoop-2.6 -DskipTests -Dhadoop.version=2.6.4
    • 运行 mvn 而不重新安装过时的杰克逊罐子。
    • 用新的 jar 重新启动 zeppelin-daemon.sh 得到:java.lang.VerifyError: class com.fasterxml.jackson.module.scala.ser.ScalaIteratorSerializer 覆盖 final 方法 withResolved.(Lcom/fasterxml /jackson/databind/BeanProperty;Lcom/fasterxml/jackson/databind/jsontype/TypeSerializer;Lcom/fasterxml/jackson/databind/JsonSerializer;)Lcom/fasterxml/jackson/databind/ser/std/AsArraySerializerBase;在 java.lang.ClassLoader.defineClass1(Native Method)
    【解决方案2】:

    您可以使用 $SPARK_HOME/jars/jackson-databind-2.6.5.jar jackson-core-2.6.5.jar jackson-annotations-2.6.5.jar 替换旧版本的 $ZEPPELIN_HOME/lib jar

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      • 2021-04-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多