Коды выхода и статусы выхода что-нибудь значат в spark?
Я вижу коды выхода и статусы выхода все время при запуске spark on yarn:
вот несколько:
CoarseGrainedExecutorBackend: RECEIVED SIGNAL 15: SIGTERM
...failed 2 times due to AM Container for application_1431523563856_0001_000002 exited with exitCode: 10...
...Exit status: 143. Diagnostics: Container killed on request
...Container exited with a non-zero exit code 52:...
...Container killed on request. Exit code is 137...
Я никогда не находил ни одного из этих сообщений полезными....Есть ли шанс интерпретировать то, что происходит на самом деле? так с этими? Я искал повсюду таблицу, объясняющую ошибки, но ничего.
единственный, который я могу расшифровать из вышеперечисленных, - это код выхода 52, но это потому, что я посмотрел на исходный код здесь. Он говорит, что это ум.
должен ли я прекратить пытаться интерпретировать остальные коды выхода и состояния выхода? Или я упускаю какой-то очевидный способ, которым эти цифры действительно что-то значат?
даже если кто-то мог бы сказать мне разницу между exit code
, exit status
и SIGNAL
это было бы полезно. Но сейчас я просто случайно угадываю, и кажется, что все вокруг меня, кто использует spark, тоже.
и, наконец, почему некоторые коды выхода меньше нуля и как их интерпретировать?
Е. Г. Exit status: -100. Diagnostics: Container released on a *lost* node
1 ответов
ни коды выхода, ни статус, ни сигналы не являются специфичными для Spark, но частью того, как процессы работают в Unix-подобных системах.
статус выхода и выхода код
статус выхода и коды выхода-это разные имена для одного и того же. Состояние выхода-это число от 0 до 255, которое указывает на результат процесса после его завершения. Состояние выхода 0 обычно указывает на успех. Значение других кодов зависит от программы и должно быть описано в документация программы. Хотя есть некоторые установленные стандартные коды. См.ответ полный список.
коды выхода, используемые Spark
на Искра источники я нашел следующее код завершения. Их описания взяты из инструкций журнала и комментариев в коде и из моего понимания кода, где появился статус выхода.
Spark SQL CLI Драйвер в улей бережливости Сервер
-
3: если UnsupportedEncodingException произошло при настройке
stdout
иstderr
потоки.
Зажигания/Пряжа
- 10: если непойманное исключение произошло
-
11: если больше, чем
spark.yarn.scheduler.reporterThread.maxFailures
произошли сбои исполнителя - 12: если поток репортера не удался с исключением
- 13: если программа завершается до инициализации пользователем контекста spark или если контекст spark не инициализируется до тайм-аута.
-
14: это объявлено как
EXIT_SECURITY
но никогда не используется - 15: если класс пользователя выдал исключение
-
16: если shutdown крючок под названием До окончательного статуса сообщении. Комментарий в исходном коде объясняет ожидаемое поведение пользовательских приложений:
по умолчанию
ApplicationMaster
не удалось, если он вызывается выключенным крючком. Это поведение отличается от 1.X версии. Если пользовательское приложение выходит раньше времени, позвонивSystem.exit(N)
, вот Марк это приложение, как не удалось сEXIT_EARLY
. Для хорошего выключения пользователь не должен звонитьSystem.exit(0)
для завершения работы приложения.
исполнители
- 50: обработчиком исключений по умолчанию был дошло
- 51: был вызван обработчик необнаруженного исключения по умолчанию, и при регистрации исключения
- 52: обработчик необнаруженного исключения по умолчанию был достигнут, и необнаруженное исключение было OutOfMemoryError
- 53: DiskStore не удалось создать локальный временный каталог после многих попыток (плохая Искра.местный.Дира?)
- 54: ExternalBlockStore не удалось инициализировать после многих попыток
- 55: ExternalBlockStore не удалось создать локальный временный каталог после многих попыток
56: исполнитель не может отправить сердцебиения водителю больше, чем "Искра".исполнитель.биение сердца.maxFailures " times.
101: возвращено spark-submit, если дочерний основной класс не найден. В режиме клиента (командная строка вариант
--deploy-mode client
) дочерний основной класс-это пользовательский класс приложения (--class CLASS
). В режиме кластера (--deploy-mode cluster
) дочерний основной класс-это конкретный класс представления/клиента диспетчера кластеров.
коды выхода более 128
эти коды выхода, скорее всего, являются результатом выключения программы, вызванного сигнал с Unix. Номер сигнала может быть вычислен путем вычитания 128 из кода выхода. Это объясняется более подробно в этом блоге (который был первоначально связан в этот вопрос). Существует также хороший ответ, объясняющий коды выхода, генерируемые JVM. Spark работает с этим предположением, как объясняется в комментарии в ExecutorExitCodes.скала!--20-->
другие коды выхода
помимо кодов выхода, перечисленных выше, есть число System.exit()
вызовы в источниках искры, устанавливающих 1 или -1 в качестве кода выхода. Насколько я рассказать -1 Кажется используется для указания отсутствующих или неправильных параметров командной строки, в то время как 1 указывает на все другие ошибки.
сигналы
сигналы-это своего рода события, которые позволяют отправлять системные сообщения процессу. Эти сообщения используются, чтобы попросить процесс перезагрузить его конфигурацию (SIGHUP
) или прекратить себя (SIGKILL
), например. Список стандартных сигналов можно найти в сигнал (7) man page в разделе стандартный Сигналы.
как объяснил Рик Мориц в комментариях ниже (Спасибо!), наиболее вероятными источниками сигналов в искровой установке являются
- the диспетчер ресурсов кластера когда размер контейнера превышен, задание завершено, выполнено динамическое масштабирование или задание прервано пользователем
- the операционные системы: как часть контролируемой системы завершите работу или если некоторый предел ресурса был ударен (из памяти, более жесткая квота, нет свободного места на диске и т. д.)
- a местные кто убил задание
я надеюсь, что это делает его немного яснее, что эти сообщения от искры может означать.