Как ограничить количество попыток при сбое работы Spark?
Мы запускаем задание Spark через spark-submit
, и я вижу, что задание будет повторно отправлено в случае сбоя.
Как я могу предотвратить попытку №2 в случае отказа контейнера из-под пряжи или какого-либо исключения?
![enter image description here]()
Это произошло из-за нехватки памяти и проблемы "Превышено ограничение GC".
Ответы
Ответ 1
Существует два параметра, которые контролируют количество повторных попыток (т.е. Максимальное количество попыток регистрации в ApplicationMaster
с помощью YARN считается неудачным и, следовательно, всего приложения Spark):
-
spark.yarn.maxAppAttempts
- собственная настройка Spark. Смотрите MAX_APP_ATTEMPTS:
private[spark] val MAX_APP_ATTEMPTS = ConfigBuilder("spark.yarn.maxAppAttempts")
.doc("Maximum number of AM attempts before failing the app.")
.intConf
.createOptional
-
yarn.resourcemanager.am.max-attempts
- собственная настройка YARN, по умолчанию 2.
(Как вы можете видеть в YarnRMClient.getMaxRegAttempts) фактическое число является минимумом параметров конфигурации YARN и Spark, причем YARN является последним средством.
Ответ 2
Решением, не зависящим от языка программирования /API, было бы установить максимальное количество попыток пряжи в качестве аргумента командной строки:
spark-submit --conf spark.yarn.maxAppAttempts=1 <application_name>
Смотрите ответ @code
Ответ 3
Добавьте свойство yarn.resourcemanager.am.max-attempts
в файл yarn-default.xml. Он определяет максимальное количество попыток приложения.
Подробнее см. ссылку