NoSuchMethodError в приложениях Spark

Я запустил приложение на 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)

Может ли кто-нибудь сказать мне, как это исправить?


person fanhk    schedule 20.11.2014    source источник
comment
NoSuchMethodError обычно сигнализирует о проблеме с версией. Используют ли ваши рабочие процессы ту же версию Spark, что и та, которую вы использовали для компиляции задания?   -  person maasg    schedule 20.11.2014
comment
Все рабочие используют Spark1.1, но некоторые из них используют jdk 1.7_67, другие используют jdk 1.7_71. Это имеет значение?   -  person fanhk    schedule 21.11.2014
comment
проблема связана с версиями Google Guava. Вероятно, какая-то версия конфликтует с библиотекой или разными версиями Spark. Вам необходимо оценить свои зависимости и просмотреть развертывание.   -  person maasg    schedule 22.11.2014
comment
Я снова проверил журнал и обнаружил ОШИБКУ в нижней части стека вызовов: 14/11/23 13:09:46 ОШИБКА BlockFetcherIterator$BasicBlockFetcherIterator: произошла ошибка при извлечении локальных блоков java.io.FileNotFoundException: /tmp/spark-local- 20141123130123-2692/0c/shuffle_0_20_88 (Нет такого файла или каталога) @maasg   -  person fanhk    schedule 23.11.2014


Ответы (2)


Несовместимая версия библиотеки 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

person suztomo    schedule 25.11.2014

Проблема здесь в том, что искра использует старую версию гуавы — 14.0.1. Похоже, что некоторые из ваших зависимостей приносят более новую версию гуавы. Просто принудительно используйте 14.0.1 в вашем инструменте сборки, и все должно быть в порядке.

person 1esha    schedule 22.11.2014
comment
Если да, то это не решит проблему, верно? 14 не работает для этого пользовательского кода. - person Sean Owen; 22.11.2014
comment
@1esha Мы проверили нашу библиотеку, созданную maven, версия guava, которую она привнесла в наш проект, - 14.0.1... - person fanhk; 23.11.2014
comment
@fanhk вы используете автономный кластер spark или mesos/yarn? - person 1esha; 23.11.2014
comment
@1esha Искра на пряже. - person fanhk; 23.11.2014