Hadoop 使用给定错误运行spark作业:com.google.common.util.concurrent.Futures.withFallback

Hadoop 使用给定错误运行spark作业:com.google.common.util.concurrent.Futures.withFallback,hadoop,apache-spark,classpath,yarn,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/googl

我尝试运行火花作业使用纱线,但得到以下错误

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用户也可以访问该类路径,但我认为Thread没有在该类路径上获得JAR。 我无法找到它的根本原因。任何帮助都将不胜感激


谢谢。

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


withFallback
被添加到Guava的第14版中。看起来你的类路径上有番石榴<14

我也遇到了同样的问题,解决方案是shade Guava以避免
classpath
冲突

如果您正在使用构建jar,您可以将其添加到
build.sbt

assemblyShadeRules in assembly := Seq(
  ShadeRule.rename("com.google.**" -> "shadeio.@1").inAll
)
我写了一篇博客文章,描述了我实现此解决方案的过程:


希望有帮助

添加到@Arjones answer,如果您使用的是gradle+,您可以将其添加到build.gradle中,以重新定位或重命名番石榴类

shadowJar{
重新定位“com.google.common”、“com.example.com.google.common”
}

否,我使用的是16.0.1版本的Guava。您使用的是fat jar吗?是的。我在类path上有所有必需的依赖项jar。检查maven依赖项树以了解较早版本的Guava(mvn依赖项:tree-Doutput=/path/to/file)或分解jar并反编译com.google.common.util.concurrent.futuresm我的问题是相同的,一些Hadoop组件使用的是Guava11。一旦更改pom.xml以抑制番石榴11,它就起作用了。谢谢。你检查过你的纱线簇了吗?我想它已经有了一些版本的番石榴罐子,在你的胖罐子里你有了最新的版本,它被纱线簇罐子覆盖了。对不起,我可以知道我可以在哪里检查纱线簇罐子吗?我想yar在spark提供的类路径上没有任何罐子“spark.driver.extraClassPath”和“spark.executor.extraClassPath”你能帮我吗?如果我真的需要番石榴来解析url或类似的东西呢?