【问题标题】:java.lang.NoSuchMethodError when I try to parse Json on sparkjava.lang.NoSuchMethodError 当我尝试在 Spark 上解析 Json 时
【发布时间】:2015-11-15 12:25:42
【问题描述】:

我在尝试使用 com.typesafe.play play-json 2.4.0 时遇到问题 在火花上。 以下代码在 Spark 服务器上出现异常,但在我的电脑上运行良好。

val json = Json.parse(json_string)

例外:

java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonToken.id()I
    at play.api.libs.json.jackson.JsValueDeserializer.deserialize(JacksonJson.scala:122)
    at play.api.libs.json.jackson.JsValueDeserializer.deserialize(JacksonJson.scala:108)
    at play.api.libs.json.jackson.JsValueDeserializer.deserialize(JacksonJson.scala:103)
    at com.fasterxml.jackson.databind.ObjectMapper._readValue(ObjectMapper.java:2860)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:1569)
    at play.api.libs.json.jackson.JacksonJson$.parseJsValue(JacksonJson.scala:226)
    at play.api.libs.json.Json$.parse(Json.scala:21)
    at org.soprism.kafka.connector.TwitterToCassandraPostsParser$.ParseJson(TwitterToCassandraPostsParser.scala:74)
    at org.soprism.kafka.connector.TwitterToCassandraPostsParser$$anonfun$1$$anonfun$apply$1.apply(TwitterToCassandraPostsParser.scala:65)
    at org.soprism.kafka.connector.TwitterToCassandraPostsParser$$anonfun$1$$anonfun$apply$1.apply(TwitterToCassandraPostsParser.scala:65)
    at scala.collection.Iterator$class.foreach(Iterator.scala:727)
    at scala.collection.AbstractIterator.foreach(Iterator.scala:1157)
    at org.apache.spark.rdd.RDD$$anonfun$foreach$1.apply(RDD.scala:798)
    at org.apache.spark.rdd.RDD$$anonfun$foreach$1.apply(RDD.scala:798)
    at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1503)
    at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1503)
    at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:61)
    at org.apache.spark.scheduler.Task.run(Task.scala:64)
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:203)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

我使用 spark-submit 命令来执行它

这似乎是杰克逊库的两个版本之间的不兼容。我该如何解决?

谢谢

【问题讨论】:

  • 您是否将 jackson-core 设置为依赖项?
  • 是的,我有这个:"com.fasterxml.jackson.core" % "jackson-core" % "2.5.4"

标签: json scala apache-spark jackson


【解决方案1】:

Spark 节点不会检查您的依赖项。您需要构建一个包含所有依赖项的 uber-jar 并将其传递给 Spark,以便分发到不同的节点。

【讨论】:

  • 我已经把杰克逊放在罐子上,但它对火花不起作用。 Spark 总是使用旧版本的杰克逊。我猜这个旧版本在 hadoop 上。
【解决方案2】:

Oozie 在共享库文件夹中有很多过时的杰克逊库:

[cloudera@quickstart oozie]$ sudo -u hdfs hadoop fs -ls -R /user/oozie/share | grep -i jackson-core
-rwxrwxrwx   1 oozie supergroup     191738 2015-11-18 03:00 /user/oozie/share/lib/hive/jackson-core-2.2.2.jar
-rw-r--r--   1 oozie supergroup     191738 2015-11-18 03:02 /user/oozie/share/lib/lib_20151118030154/hcatalog/jackson-core-2.2.2.jar
-rw-r--r--   1 oozie supergroup     227500 2015-11-18 03:02 /user/oozie/share/lib/lib_20151118030154/hcatalog/jackson-core-asl-1.8.8.jar
-rw-r--r--   1 oozie supergroup     191738 2015-11-18 03:02 /user/oozie/share/lib/lib_20151118030154/hive/jackson-core-2.2.2.jar
-rw-r--r--   1 oozie supergroup     227500 2015-11-18 03:02 /user/oozie/share/lib/lib_20151118030154/hive/jackson-core-asl-1.8.8.jar
-rw-r--r--   1 oozie supergroup     227500 2015-11-18 03:02 /user/oozie/share/lib/lib_20151118030154/hive2/jackson-core-asl-1.8.8.jar
-rw-r--r--   1 oozie supergroup     227500 2015-11-18 03:01 /user/oozie/share/lib/lib_20151118030154/pig/jackson-core-asl-1.8.8.jar
-rw-r--r--   1 oozie supergroup     192699 2015-11-18 03:02 /user/oozie/share/lib/lib_20151118030154/spark/jackson-core-2.2.3.jar
-rw-r--r--   1 oozie supergroup     227500 2015-11-18 03:02 /user/oozie/share/lib/lib_20151118030154/spark/jackson-core-asl-1.8.8.jar
-rw-r--r--   1 oozie supergroup     197986 2015-11-18 03:02 /user/oozie/share/lib/lib_20151118030154/sqoop/jackson-core-2.3.1.jar
-rwxrwxrwx   1 oozie supergroup     227500 2015-11-18 03:00 /user/oozie/share/lib/pig/jackson-core-asl-1.8.8.jar
-rwxrwxrwx   1 oozie supergroup     195678 2015-11-18 03:00 /user/oozie/share/lib/sqoop/jackson-core-2.3.1.jar
-rwxrwxrwx   1 oozie supergroup     224637 2015-11-18 03:00 /user/oozie/share/lib/sqoop/jackson-core-asl-1.8.8.jar
[cloudera@quickstart oozie]$ 

在 workflow.xml 的部分中使用以下道具:

<property>
    <name>oozie.launcher.mapreduce.task.classpath.user.precedence</name>
    <value>true</value>
</property>

这是 Oozie 中的一个错误。查看以下链接了解详情: https://issues.apache.org/jira/browse/OOZIE-2066
http://gbif.blogspot.com.by/2014/11/upgrading-our-cluster-from-cdh4-to-cdh5.html

不要忘记在 uber jar 中为 Oozie lib 添加 jackson。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多