Почему спам не работает с org.apache.spark.shuffle.MetadataFetchFailedException: Отсутствует местоположение вывода для перетасовки 0 в режиме спекуляции? - программирование
Подтвердить что ты не робот

Почему спам не работает с org.apache.spark.shuffle.MetadataFetchFailedException: Отсутствует местоположение вывода для перетасовки 0 в режиме спекуляции?

Я запускаю работу Spark в режиме спекуляции. У меня около 500 задач и около 500 файлов с объемом 1 ГБ. Я продолжаю работать в каждой задаче, для 1-2 задач, приложенной ошибки, где она повторяется несколько десятков раз (чтобы не завершить работу).

org.apache.spark.shuffle.MetadataFetchFailedException: Отсутствует местоположение вывода для перетасовки 0

Любая идея, в чем смысл проблемы и как ее преодолеть?

org.apache.spark.shuffle.MetadataFetchFailedException: Missing an output location for shuffle 0
    at org.apache.spark.MapOutputTracker$$anonfun$org$apache$spark$MapOutputTracker$$convertMapStatuses$1.apply(MapOutputTracker.scala:384)
    at org.apache.spark.MapOutputTracker$$anonfun$org$apache$spark$MapOutputTracker$$convertMapStatuses$1.apply(MapOutputTracker.scala:381)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
    at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:108)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
    at scala.collection.mutable.ArrayOps$ofRef.map(ArrayOps.scala:108)
    at org.apache.spark.MapOutputTracker$.org$apache$spark$MapOutputTracker$$convertMapStatuses(MapOutputTracker.scala:380)
    at org.apache.spark.MapOutputTracker.getServerStatuses(MapOutputTracker.scala:176)
    at org.apache.spark.shuffle.hash.BlockStoreShuffleFetcher$.fetch(BlockStoreShuffleFetcher.scala:42)
    at org.apache.spark.shuffle.hash.HashShuffleReader.read(HashShuffleReader.scala:40)
    at org.apache.spark.rdd.ShuffledRDD.compute(ShuffledRDD.scala:92)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:263)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:230)
    at org.apache.spark.rdd.MappedRDD.compute(MappedRDD.scala:31)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:263)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:230)
    at org.apache.spark.rdd.FlatMappedRDD.compute(FlatMappedRDD.scala:33)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:263)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:230)
    at org.apache.spark.rdd.MappedRDD.compute(MappedRDD.scala:31)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:263)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:230)
    at org.apache.spark.rdd.MappedRDD.compute(MappedRDD.scala:31)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:263)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:230)
    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:196)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:722)
4b9b3361

Ответ 1

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

Решение заключалось в том, чтобы либо добавить swap, либо настроить рабочий/исполнитель на использование меньше памяти в дополнение к использованию уровня хранения MEMORY_AND_DISK для нескольких сохраняемых объектов.

Ответ 2

У нас была аналогичная ошибка с Spark, но я не уверен, что это связано с вашей проблемой.

Мы использовали JavaPairRDD.repartitionAndSortWithinPartitions на 100 ГБ данных, и он продолжал сбой аналогично вашему приложению. Затем мы посмотрели журналы Yarn на конкретных узлах и выяснили, что у нас есть проблема с памятью, поэтому пряжа прервала выполнение. Наше решение состояло в том, чтобы изменить/добавить spark.shuffle.memoryFraction 0 в .../spark/conf/spark-defaults.conf. Это позволило нам обрабатывать гораздо больший (но, к сожалению, не бесконечный) объем данных таким образом.

Ответ 3

У меня такая же проблема на моем трехмерном кластере YARN. Я продолжал менять оперативную память, но проблема сохранялась. Наконец, я видел следующие сообщения в журналах:

17/02/20 13:11:02 WARN spark.HeartbeatReceiver: Removing executor 2 with no recent heartbeats: 1006275 ms exceeds timeout 1000000 ms
17/02/20 13:11:02 ERROR cluster.YarnScheduler: Lost executor 2 on 1worker.com: Executor heartbeat timed out after 1006275 ms

и после этого появилось следующее сообщение:

org.apache.spark.shuffle.MetadataFetchFailedException: Missing an output location for shuffle 67

Я изменил свойства в spark-defaults.conf следующим образом:

spark.yarn.scheduler.heartbeat.interval-ms 7200000
spark.executor.heartbeatInterval 7200000
spark.network.timeout 7200000

Что это! После этого моя работа завершилась успешно.

Ответ 4

В моем случае (автономный кластер) исключение было выбрано потому, что файловая система некоторых подчиненных Spark была заполнена на 100%. Удаление всех в папках spark/work подчиненных устройств решило проблему.

Ответ 5

Я решил эту ошибку увеличить выделенную память в executorMemory и driverMemory. Вы можете сделать это в HUE, выбрав программу Spark, которая вызывает проблему, а в свойствах → Список опций вы можете добавить что-то вроде этого:

--driver-memory 10G --executor-memory 10G --num-executors 50 --executor-cores 2

Разумеется, значения параметров будут различаться в зависимости от размера вашего кластера и ваших потребностей.

Ответ 6

У меня такая же проблема, но я искал много ответов, которые не могут решить мою проблему. в конце концов, я отлаживаю свой код шаг за шагом. Я нахожу, что проблема, вызванная размером данных, не сбалансирована для каждого раздела, что привело к MetadataFetchFailedException что на этапе map не reduce стадию. просто сделайте df_rdd.repartition(nums) перед reduceByKey()

Ответ 7

Эта проблема касается памяти. Вы передаете память, которая недоступна. В команде запроса искры есть 3 параметры памяти и исполнения. Этими параметрами являются

--driver-memory 1200M
--driver-cores  1
--num-executors 1  

Дайте память драйвера max n/2 (n= общая память node.)

Дайте драйверные ядра n/1000 (n= память драйвера (в MB))

Дайте num-executors n (n= количество узлов, которые у вас есть)

Если вы не укажете правильные параметры в команде запроса искры, тогда будет медленный ответ или это вызовет исключение.