我正在运行一个用Scala 2.10.4编写并在Spark 1.4.0集群上运行的spark作业(基于HDFS并使用YARN管理)并在Maven存储库上使用Jackson模块版本2.6.1
在我的IDE(IntelliJ IDEA v14)本地运行代码时,一切都在内存群集上运行,但在我的远程群集(AWS VPC上的EMR群集)上运行作业时,我遇到以下异常:
java.lang.AbstractMethodError: com.company.scala.framework.utils.JsonParser$$anon$1.com$fasterxml$jackson$module$scala$experimental$ScalaObjectMapper$_setter_$com$fasterxml$jackson$module$scala$experimental$ScalaObjectMapper$$typeCache_$eq(Lorg/spark-project/guava/cache/LoadingCache;)V
at com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper$class.$init$(ScalaObjectMapper.scala:50)
at com.company.scala.framework.utils.JsonParser$$anon$1.<init>(JsonParser.scala:14)
at com.company.scala.framework.utils.JsonParser$.<init>(JsonParser.scala:14)
at com.company.scala.framework.utils.JsonParser$.<clinit>(JsonParser.scala)
at com.company.migration.Migration$.printAllKeys(Migration.scala:21)
at com.company.migration.Main$$anonfun$main$1.apply(Main.scala:22)
at com.company.migration.Main$$anonfun$main$1.apply(Main.scala:22)
at scala.collection.Iterator$$anon$13.hasNext(Iterator.scala:371)
at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:327)
at org.apache.spark.util.collection.ExternalSorter.insertAll(ExternalSorter.scala:199)
at org.apache.spark.shuffle.sort.SortShuffleWriter.write(SortShuffleWriter.scala:56)
at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:70)
at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:41)
at org.apache.spark.scheduler.Task.run(Task.scala:70)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:213)
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)
Run Code Online (Sandbox Code Playgroud)
我试图查看网页上的例外,没有运气.我也尝试在这里找一个类似的问题,发现只有一个线程没有可接受的答案,没有一个答案帮助我.
希望在这里找到帮助,
谢谢.
我有一个spark应用程序,它从文件中读取行并尝试使用jackson对它们进行反序列化.为了使这段代码能够工作,我需要在Map操作中定义ObjectMapper(否则我得到一个NullPointerException).
我有以下代码正在工作:
val alertsData = sc.textFile(rawlines).map(alertStr => {
val mapper = new ObjectMapper()
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
mapper.registerModule(DefaultScalaModule)
broadcastVar.value.readValue(alertStr, classOf[Alert])
})
Run Code Online (Sandbox Code Playgroud)
但是,如果我在地图外部定义映射器并对其进行广播,则会因NullPointerException而失败.
此代码失败:
val mapper = new ObjectMapper()
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
mapper.registerModule(DefaultScalaModule)
val broadcastVar = sc.broadcast(mapper)
val alertsData = sc.textFile(rawlines).map(alertStr => {
broadcastVar.value.readValue(alertStr, classOf[Alert])
})
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
谢谢,Aliza