java - Spark 应用程序上的 NoSuchMethodError

标签 java apache-spark rdd

我在 Spark 集群 上运行了一个应用程序,但它给了我这样一个错误:

     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)

有人可以告诉我如何解决吗?

最佳答案

不兼容的 Google Guava 库版本在其运行时类路径之前。我建议澄清这种情况的类型并解决它:

案例一:项目依赖问题

当您使用 Maven 时,maven dependency:tree可以告诉你库中的所有依赖项。如果您看到多个 Google Guava 版本,请通过添加 <exclusion> 来修复该问题标记依赖于不兼容的 Guava 版本的库依赖项。

案例二:运行环境问题

如果您的依赖项是正确的,那么问题出在您的运行时环境的 CLASSPATH 中,其中 Google Guava 库的不兼容版本先于所需版本。虽然我没试过这个,但我看到 spark 有实验性的 spark.files.userClassPathFirst配置(下面的链接)。这可能会解决您的问题。 https://spark.apache.org/docs/1.1.0/configuration.html

关于java - Spark 应用程序上的 NoSuchMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27041640/

相关文章:

java - 比较两个数组时,从第三个数组打印正确的项目时出现问题

java - 使用 jdk 8 的默认 jaxws-ri 实现禁用 SOAP 客户端的 SOAP 验证

java - 如何从java中的空值空字符串替换?

java - 通过子查询缩小查询结果

scala - Spark 节点不断打印 GC(分配失败)并且没有任务运行

lambda - 使用 pyspark 交叉组合两个 RDD

scala - Spark : how can i create local dataframe in each executor

java - Spark (Java): Get Filename/Content pairs from a list of file names

json - 将 JSON 对象转换为 RDD

python - 如何将分区保存到特定名称的文件?