使用Yarn给出错误来运行spark作业:com.google.common.util.concurrent.Futures.withFallback

时间:2015-08-17 10:12:33

标签: hadoop apache-spark classpath yarn

我正在尝试使用纱线运行火花工作,但是低于错误

java.lang.NoSuchMethodError: com.google.common.util.concurrent.Futures.withFallback(Lcom/google/common/util/concurrent/ListenableFuture;Lcom/google/common/util/concurrent/FutureFallback;Ljava/util/concurrent/Executor;)Lcom/google/common/util/concurrent/ListenableFuture;
at com.datastax.driver.core.Connection.initAsync(Connection.java:176)
at com.datastax.driver.core.Connection$Factory.open(Connection.java:721)
at com.datastax.driver.core.ControlConnection.tryConnect(ControlConnection.java:248)
at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:194)
at com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:82)
at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1307)
at com.datastax.driver.core.Cluster.init(Cluster.java:159)
at com.datastax.driver.core.Cluster.connect(Cluster.java:249)
at com.figmd.processor.ProblemDataloader$ParseJson.call(ProblemDataloader.java:46)
at com.figmd.processor.ProblemDataloader$ParseJson.call(ProblemDataloader.java:34)
at org.apache.spark.api.java.JavaRDDLike$$anonfun$fn$4$1.apply(JavaRDDLike.scala:140)
at org.apache.spark.api.java.JavaRDDLike$$anonfun$fn$4$1.apply(JavaRDDLike.scala:140)
at org.apache.spark.rdd.RDD$$anonfun$14.apply(RDD.scala:618)
at org.apache.spark.rdd.RDD$$anonfun$14.apply(RDD.scala:618)
at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:35)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:280)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:247)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:61)
at org.apache.spark.scheduler.Task.run(Task.scala:56)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:200)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

群集详细信息: Spark 1.2.1,hadoop 2.7.1 我使用spark.driver.extraClassPath提供了类路径。 hadoop用户也可以访问该类路径。但我认为yarn并没有获得该类路径上的JAR。 我无法达到它的根本原因。任何帮助将不胜感激。

感谢。

3 个答案:

答案 0 :(得分:6)

我遇到了同样的问题,解决方案是 shade guava 以避免classpath碰撞。

如果您正在使用sbt assembly来构建广告素材,则可以将其添加到build.sbt

assemblyShadeRules in assembly := Seq(
  ShadeRule.rename("com.google.**" -> "shadeio.@1").inAll
)

我写了一篇博客文章,介绍了我到达此解决方案的流程:Making Hadoop 2.6 + Spark-Cassandra Driver Play Nice Together

希望它有所帮助!

答案 1 :(得分:2)

问题与番石榴版本不匹配有关。

withFallback已添加到Guava版本14中。看起来你有Guava<你的课程路径上的14

答案 2 :(得分:1)

添加@Arjones答案,如果您使用的是gradle + GradleShadow,则可以将其添加到build.gradle中以重新定位或重命名Guava类。

shadowJar {
    relocate 'com.google.common', 'com.example.com.google.common'
}