Spark运行时错误:spark.metrics.sink.MetricsServlet无法实例化

在IntelliJ中使用maven中的spark 1.3 lib运行项目时,我遇到了调用目标exception。

我只在IntelliJ IDE中遇到此错误。 在我部署jar并通过spark-submit运行后,错误消失了。

以前有人遇到过同样的问题吗? 我希望解决这个问题,以便进行简单的调试。 否则每次我想运行代码时都要打包jar。

详情如下:

2015-04-21 09:39:13 ERROR MetricsSystem:75 - Sink class org.apache.spark.metrics.sink.MetricsServlet cannot be instantialized 2015-04-21 09:39:13 ERROR TrainingSFERunner:144 - java.lang.reflect.InvocationTargetException 2015-04-20 16:08:44 INFO BlockManagerMaster:59 - Registered BlockManager Exception in thread "main" java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) at org.apache.spark.metrics.MetricsSystem$$anonfun$registerSinks$1.apply(MetricsSystem.scala:187) at org.apache.spark.metrics.MetricsSystem$$anonfun$registerSinks$1.apply(MetricsSystem.scala:181) at scala.collection.mutable.HashMap$$anonfun$foreach$1.apply(HashMap.scala:98) at scala.collection.mutable.HashMap$$anonfun$foreach$1.apply(HashMap.scala:98) at scala.collection.mutable.HashTable$class.foreachEntry(HashTable.scala:226) at scala.collection.mutable.HashMap.foreachEntry(HashMap.scala:39) at scala.collection.mutable.HashMap.foreach(HashMap.scala:98) at org.apache.spark.metrics.MetricsSystem.registerSinks(MetricsSystem.scala:181) at org.apache.spark.metrics.MetricsSystem.start(MetricsSystem.scala:98) at org.apache.spark.SparkContext.(SparkContext.scala:390) at org.apache.spark.api.java.JavaSparkContext.(JavaSparkContext.scala:61) at spark.mllibClassifier.JavaRandomForests.run(JavaRandomForests.java:105) at spark.mllibClassifier.SparkMLlibMain.runMain(SparkMLlibMain.java:263) at spark.mllibClassifier.JavaRandomForests.main(JavaRandomForests.java:221) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134) Caused by: java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.module.SimpleSerializers.(Ljava/util/List;)V at com.codahale.metrics.json.MetricsModule.setupModule(MetricsModule.java:223) at com.fasterxml.jackson.databind.ObjectMapper.registerModule(ObjectMapper.java:469) at org.apache.spark.metrics.sink.MetricsServlet.(MetricsServlet.scala:45) 

我的pom文件如下。

   4.0.0 projects project1 1.0-SNAPSHOT   org.apache.commons commons-lang3 3.0   org.apache.lucene lucene-core 5.0.0   org.apache.lucene lucene-analyzers-common 5.0.0   log4j log4j 1.2.17   junit junit 3.8.1 test   commons-io commons-io 2.1 test   org.apache.spark spark-core_2.10 1.3.0   org.apache.spark spark-mllib_2.10 1.3.0   colt colt 1.2.0      org.apache.maven.plugins maven-compiler-plugin 3.2  1.7 1.7    maven-assembly-plugin   package  single      jar-with-dependencies       

奇怪的是,当我将火花相关的依赖项移到前面时,我发现错误不再出现。

    org.apache.spark spark-core_2.10 1.3.0   org.apache.spark spark-mllib_2.10 1.3.0  //....the rest dependencies....  

所以依赖关系的顺序很重要! 谁知道为什么?

我认为这里的问题是jackson依赖。 我有类似的问题,问题是多个jackson-core和jackson-databind版本。 我认为这是scala相关问题。 无论如何,将这2个jackson依赖项添加到具有较低版本的pom,它应该可以工作。 也许你从第一次尝试就找不到合适的版本。 这个对我有用。

  2.4.4 2.3.0   org.apache.spark spark-core_2.11 ${spark.version}    org.apache.spark spark-mllib_2.11 ${spark.version}    com.fasterxml.jackson.core jackson-core ${jackson-core.version}    com.fasterxml.jackson.core jackson-databind ${jackson-core.version}