Подтвердить что ты не робот

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

Я развертываю задание обработки данных Spark в кластере EC2, задание для кластера мало (16 ядер с общим объемом 120 ГБ), у самого большого RDD всего 76k + строк. Но сильно перекошен в середине (таким образом, требуется перераспределение), и каждая строка имеет около 100 тыс. Данных после сериализации. Работа всегда застряла в переделке. А именно, задание будет постоянно получать следующие ошибки и повторять:

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

org.apache.spark.shuffle.FetchFailedException: Error in opening FileSegmentManagedBuffer

org.apache.spark.shuffle.FetchFailedException: java.io.FileNotFoundException: /tmp/spark-...

Я попытался определить проблему, но, похоже, как память, так и дисковое потребление машины, бросающей эти ошибки, составляют менее 50%. Я также пробовал разные конфигурации, в том числе:

let driver/executor memory use 60% of total memory.
let netty to priortize JVM shuffling buffer.
increase shuffling streaming buffer to 128m.
use KryoSerializer and max out all buffers
increase shuffling memoryFraction to 0.4

Но никто из них не работает. Небольшое задание всегда вызывает ту же последовательность ошибок и максимальное количество попыток (до 1000 раз). Как устранить эту проблему в такой ситуации?

Спасибо, если у вас есть какие-либо подсказки.

4b9b3361

Ответ 1

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

ERROR 2015-05-12 17:29:16,984 Logging.scala:75 - Lost executor 13 on node-xzy: remote Akka client disassociated

Каждый раз, когда вы получаете эту ошибку, вы теряете исполнителя. Как вы потеряли исполнителя, это еще одна история, еще раз проверьте свой журнал на наличие подсказок.

Одна вещь Пряжа может убить вашу работу, если она думает, что вижу, что вы используете "слишком много памяти"

Проверьте что-то вроде этого:

org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl  - Container [<edited>] is running beyond physical memory limits. Current usage: 18.0 GB of 18 GB physical memory used; 19.4 GB of 37.8 GB virtual memory used. Killing container.

Также см.: http://apache-spark-developers-list.1001551.n3.nabble.com/Lost-executor-on-YARN-ALS-iterations-td7916.html

Современное состояние техники заключается в увеличении spark.yarn.executor.memoryOverhead, пока работа не перестанет работать. У нас есть планирует попытаться автоматически масштабировать его на основе объема памяти но он все равно будет эвристическим.

Ответ 2

Я также получал ошибку

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

и, смотря далее в журнале, я нашел

Container killed on request. Exit code is 143

После поиска кода выхода я понял, что в основном это связано с распределением памяти. Поэтому я проверил объем памяти, который я настроил для исполнителей. Я обнаружил, что по ошибке я настроил 7g на драйвер и только 1g для исполнителя. После увеличения памяти исполнителя моя искра работала успешно.