我在Spark cluster
上运行了一个应用程序,但它给了我error
这样的代码:
14/11/20 21:59:08 WARN TaskSetManager: Lost task 11.0 in stage 0.0 (TID 64, spark1): java.lang.NoSuchMethodError: com.google.common.io.ByteStreams.limit(Ljava/io/InputStream;J)Ljava/io/InputStream; org.apache.spark.util.collection.ExternalAppendOnlyMap$DiskMapIterator.nextBatchStream(ExternalAppendOnlyMap.scala:456)
org.apache.spark.util.collection.ExternalAppendOnlyMap$DiskMapIterator.<init> (ExternalAppendOnlyMap.scala:428) org.apache.spark.util.collection.ExternalAppendOnlyMap.spill(ExternalAppendOnlyMap.scala:235) org.apache.spark.util.collection.ExternalAppendOnlyMap.insertAll(ExternalAppendOnlyMap.scala:150)
org.apache.spark.Aggregator.combineValuesByKey(Aggregator.scala:58)
org.apache.spark.shuffle.hash.HashShuffleReader.read(HashShuffleReader.scala:48)
org.apache.spark.rdd.ShuffledRDD.compute(ShuffledRDD.scala:92)
org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:262)
org.apache.spark.rdd.RDD.iterator(RDD.scala:229)
org.apache.spark.rdd.MappedRDD.compute(MappedRDD.scala:31)
org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:262)
org.apache.spark.rdd.RDD.iterator(RDD.scala:229)
org.apache.spark.rdd.MappedRDD.compute(MappedRDD.scala:31)
org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:262)
org.apache.spark.rdd.RDD.iterator(RDD.scala:229)
org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:62)
org.apache.spark.scheduler.Task.run(Task.scala:54)
org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:177)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
java.lang.Thread.run(Thread.java:745)
有人能告诉我如何修复它吗?
答案 0 :(得分:3)
不兼容的Google Guava库版本位于其运行时类路径之前。我建议澄清这种情况的类型并解决它:
案例1:项目依赖性中的问题
当您使用maven时,maven dependency:tree
可以告诉您库中的所有依赖项。如果您看到多个Google Guava版本,请通过向库依赖项添加<exclusion>
标记来修复此问题,该依赖项取决于不兼容的Guava版本。
案例2:运行时环境中的问题
如果您的依赖项是正确的,则问题出在您的运行时环境的CLASSPATH中,其中不兼容的Google Guava库版本位于所需版本之前。虽然我没有尝试过这个,但我看到spark有实验spark.files.userClassPathFirst
配置(链接如下)。这可能会解决您的问题。
https://spark.apache.org/docs/1.1.0/configuration.html
答案 1 :(得分:0)
这里的问题是火花使用旧的番石榴版本 - 14.0.1。看起来你们中的一些依赖项带来了更新版本的番石榴。只需强制在你的构建工具中使用14.0.1,一切都应该没问题