Обзор состояния воздушного потока Apache

В Airflow, чтобы описать состояние группы доступности базы данных или задачи, которая ожидает выполнения следующих шагов, мы определили состояние, чтобы делиться этой информацией о ходе конвейера. Без состояния выполнение любой группы DAG или задачи становится черным ящиком, и вам может потребоваться создать дополнительный внешний флаг или ресурсы для проверки состояния, чтобы помочь определить, завершено ли задание или не удалось. К счастью, Airflow предоставляет механизм состояния и сохраняет каждое из последних записанных состояний в своей внутренней БД. Этот способ не только позволяет легко отслеживать статус любого задания в пользовательском интерфейсе или базе данных Airflow, но и является постоянным слоем, помогающим повторно запускать или выполнять обратную засыпку в случае сбоя.

В этой статье мы собираемся обсудить основы того, что такое состояние воздушного потока, какие типы это состояния, как использовать состояние воздушного потока для тестирования и отладки. Могут быть внешние службы, и Airflow также может отслеживать эти состояния, но эти состояния выходят за рамки нашего обсуждения.

Что государство делает в Airflow?

Хороший пример состояний в реальной жизни - это светофор. У вас будет три состояния: КРАСНЫЙ, ЖЕЛТЫЙ и ЗЕЛЕНЫЙ. КРАСНЫЙ свет запрещает движение любого транспорта, а ЗЕЛЕНЫЙ свет разрешает движение.

Самое простое использование состояния Airflow - обозначить текущий статус и назначить планировщику Airflow решение о будущих действиях. Хотя в Airflow есть больше состояний, похожих на светофор, есть некоторые общие характеристики.

  • Нет двойных состояний. В Airflow состояние - это одно значение. Двойные состояния не допускаются. Таким образом, состояние с обоими значениями «Failed» и «UP_FOR_RETRY» здесь не имеет особого смысла.
  • Состояние является статическим или моментальным снимком в данный момент. Airflow сохранил состояние в своей внутренней базе данных, и обновление состояния не является непрерывным процессом. Из-за интервала пульса планировщика Airflow вы можете столкнуться с редкими случаями, когда состояние в БД обновляется с задержкой, и планировщик выходит из строя.
  • У государства есть определенный жизненный цикл. В репозитории Airflow есть подробная диаграмма жизненного цикла. Состояние должно следовать за потоком жизненного цикла, и состояние обычно не может вернуться назад, за исключением случаев повтора.

Что это за состояния? И когда я их увижу?

Что касается текущей версии Airflow 1.10.11, состояние в Airflow делится на две основные категории: Задачи и Дагрун.

  • Дагрун: УСПЕХ, РАБОТАЕТ, НЕУДАЧИ;
  • Задача: SUCCESS, RUNNING, FAILED, UPSTREAM_FAILED, SKIPPED, UP_FOR_RETRY, UP_FOR_RESCHEDULE, QUEUED, NONE, SCHEDULED.

DAG - это набор задач; Состояние DAG похоже на главный выключатель питания в вашем доме. Если это не удалось, даже вы продолжите выполнение своих задач, и планировщик Airflow проигнорирует это, поскольку состояние dagrun не выполнено.

Состояние на уровне задачи находится на более детальном уровне, поскольку задачи могут иметь зависимости друг от друга. У некоторых состояний может быть несколько последовательных состояний, и именно поэтому у вас есть больше состояний на уровне задачи, чтобы справиться с более сложной ситуацией. Например, upstream_failed указывает, что текущая задача не может быть выполнена из-за сбоя в восходящем направлении.

Другой способ взглянуть на состояние - это увидеть, завершено оно или нет. Завершенное состояние означает, что планировщик Airflow больше не будет их отслеживать, поэтому он выходит за рамки планирования и мониторинга. С другой стороны, для незавершенного состояния это ожидающие состояния, будут предстоящие изменения для текущего незавершенного состояния, но конечная цель - достичь завершенного состояния.

На данный момент завершенными состояниями являются SUCCESS, FAILED, UPSTREAM_FAILED (обратите внимание, что это не упоминается в списке завершенных состояний) и SKIPPED, все остальные являются незавершенными состояниями.

Давайте рассмотрим каждое государство более подробно и обсудим его.

УСПЕХ (как на уровне dagrun, так и на уровне задачи | состояние завершения): состояние успеха показывает, что Airflow не столкнулся с какой-либо ошибкой при выполнении задания и завершился успешно. В Воздушном потоке у дагруна есть темно-зеленый круг, а на уровне задания - темно-зеленый квадрат. Даже для фиктивной задачи, поскольку ошибки нет, хотя Airflow здесь не выполняет ничего значимого, он все равно будет рассматривать фиктивную задачу как УСПЕХ, поскольку мы говорим Airflow ничего не запускать, а Airflow должен вернуть УСПЕХ нас.

RUNNING (как на уровне dagrun, так и на уровне задачи | незавершенное StateState): состояние выполнения определяет, что планировщик Airflow уже назначил этот тег или задачу исполнителю. Он отслеживает (посредством пульса) свое состояние, а исполнитель выполняет фактические задания. В Воздушном потоке у дагруна есть светло-зеленый кружок, а на уровне задачи - светло-зеленый квадрат. Так как RUNNING - это незавершенное состояние, в любой момент времени ваш dag или задача может завершиться ошибкой, тогда это приведет к повторной попытке или неудачному состоянию. Кроме того, на уровне задачи, пока данная задача все еще выполняется, если вы повторно запустите саму задачу (очистив ее состояние), иногда планировщик Airflow устанавливает состояние SHUTDOWN, которое является внешним запросом. выключить и убить задачу.

FAILED (как на уровне dagrun, так и на уровне задачи | состояние завершения): состояние ошибки указывает пользователям, что что-то идет не так во время периода выполнения, и Airflow не может запланировать и выполнить это к концу. В Airflow у дагруна есть красный кружок, а у уровня задачи - красный квадрат. Поскольку в Airflow нет двойных состояний, для частичного успеха dagrun все равно помечает как не удалось, чтобы пользователи могли исследовать дальше. С другой стороны, на уровне задачи Airflow отмечает точные неудачные задачи, а все последующие задачи помечаются как UPSTREAM_FAILED (если trigger_rule по умолчанию all_success), что удобно, чтобы помочь пользователям найти немедленно определить первопричину неисправности.

UPSTREAM_FAILED (только уровень задачи | состояние завершения): состояние отказа восходящего потока - это состояние, которое относится к некоторым ошибкам, произошедшим в восходящем направлении. У вас также может быть несколько восходящих потоков, и в этом случае вы должны рассмотреть trigger_rule, которое по умолчанию равно all_success. В этом случае, если какая-либо из вышестоящих задач не удалась, вы получите сообщение UPSTREAM_FAILED. Однако, если вы не хотите, чтобы такое поведение происходило, Airflow предоставляет больше возможностей, например, вы можете выполнить one_success,, который продолжит текущую задачу, если только одна из вышестоящих задач будет успешной.

ПРОПУСКАЕТСЯ (только уровень задачи | завершенное состояние): пропущенное состояние - это задача, выполнение которой было проигнорировано, и планировщик обходит задачу и продолжает. Пропуск задачи обычно является ожидаемым поведением в операции ветвления, и у вас будет несколько условий на выбор, после того как некоторые из них будут определены, невыбранные помечаются как пропущенные. Вы также можете отметить задачу как пропущенную явно без использования оператора ветвления, что включает в себя настройку состояния Airflow вручную. Всякий раз, когда у вас есть пропущенная задача, все ее последующие также будут пропущены.

UP_FOR_RETRY (только уровень задачи | незавершенное состояние): состояние up_for_retry означает, что предыдущие попытки были неудачными, так как эта задача была повторена несколько раз, она помечена как готовая к повторной попытке. Но как долго задача должна ждать повтора на следующей итерации? Планировщик Airflow ждет после прохождения интервала повтора и берет его, когда достигает следующего пульса планировщика.

UP_FOR_RESCHEDULE (только уровень задачи | незавершенное состояние): up_for_reschedule - это недавно введенное состояние, начиная с Airflow 1.10.2, более подробную информацию можно найти в Основные моменты из нового Apache Airflow Релиз 1.10.2 ». Это состояние работает в основном для датчиков и помогает избежать использования всех рабочих слотов, чтобы можно было разрешить состояние взаимоблокировки.

QUEUED (только уровень задачи | незавершенное состояние): состояние очереди запускается, когда задача ожидает слота в исполнителе. Состояние очереди - это просто список ожидания, в котором исполнитель должен выполнить учет в конвейере, исполнитель назначает задачи работнику для выполнения фактической задачи. Как только слот становится доступным, задача извлекается из очереди (с приоритетом), и рабочий собирается ее запустить.

НЕТ (только уровень задачи | незавершенное состояние): ни одно состояние может сбивать с толку, поскольку на каком-то языке оно представляет собой неизвестное. Здесь это просто способ описать созданную новую задачу, начальное состояние которой неизвестно. Вы можете наблюдать состояние None, когда запускается новый дагрун, все его задачи изначально равны None. Кроме того, если вы хотите повторно запустить некоторые даги или задачи, как только вы очистите состояние, все они станут состояниями Нет. В бэкэнде, если вы запускаете дагрун в первый раз, хотя все задачи находятся в состоянии NONE, вы не найдете никаких записей в БД до тех пор, пока задачи не запланированы. Однако повторный запуск задачи для очистки ее состояния - это другая история, вы найдете ее предыдущее состояние в базе данных перед повторным запуском.

ПО РАСПИСАНИЮ (только на уровне задачи | незавершенное состояние): состояние ПО РАСПИСАНИЮ предназначено для того, чтобы Airflow отправлял задачи исполнителю для выполнения. Планировщик Airflow проверяет несколько условий, чтобы определить, можно ли запланировать задачи. Например, задача может быть заблокирована для планирования из-за доступных слотов во всем воздушном потоке и времени между временем настенных часов и запланированным временем. Как только все условия будут выполнены для планирования, планировщик Airflow перейдет с задачей в состояние РАСПИСАНИЕ.

Одна интересная функция - изменить цвета в пользовательском интерфейсе Airflow. Если вам не нравится вариант по умолчанию, эта новая функция, представленная в Airflow 1.10.11, позволяет настраивать цвета состояния в пользовательском интерфейсе.

Жизненный цикл состояния задачи воздушного потока

Состояние управляется планировщиком и исполнителем Airflow. На официальном GitHub Airflow эта диаграмма жизненного цикла прекрасно показывает блок-схему состояния. Мы рассмотрели каждое состояние и состояние для датчика (UP_FOR_RESCHEDULE). На этой диаграмме также показан список возможных состояний для каждого компонента. Альтернативный переход между этапами - это опция для каждого оператора Airflow, который контролируется пользователем, чтобы выполнить повторную попытку (необязательно). Тем не менее, все остальные этапы должны следовать этому переходному процессу.

Последняя мысль

Государство - незаменимый элемент в экосистеме Airflow. Состояния похожи на
ремень безопасности в Airflow, он отслеживается для каждого dagrun и задачи, всякий раз, когда происходит сбой в планировщике, исполнителе или работнике Airflow, State выполняет роль контрольной точки, поэтому нам не нужно перезапустить с самого начала. Кроме того, поскольку состояние также отображается в пользовательском интерфейсе Airflow, все используют его как центральное место для отслеживания состояния. Наконец, внутренний Airflow использует состояние для отслеживания хода выполнения задач, и инженеры могут полагаться на состояние для выполнения более индивидуальных задач. Я надеюсь, что эта статья может дать вам базовое представление о состоянии воздушного потока и о том, почему так важно понимать разницу между каждым состоянием. Ваше здоровье!!