Как ограничить количество попыток при сбое работы 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. Он определяет максимальное количество попыток приложения.

Подробнее см. ссылку