Коды выхода и статусы выхода что-нибудь значат в 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 местные кто убил задание

я надеюсь, что это делает его немного яснее, что эти сообщения от искры может означать.