Airflow 1.9.0 - это очередность, но не запуск задач

Воздушный поток случайно не выполняет поставленные в очередь задачи, некоторые задачи даже не получают статус в очереди. Я продолжаю видеть ниже в журналах планировщика

 [2018-02-28 02:24:58,780] {jobs.py:1077} INFO - No tasks to consider for execution.

Я вижу задачи в базе данных, которые либо не имеют статуса, либо находятся в очереди, но они никогда не запускаются.

Настройка воздушного потока выполняется на https://github.com/puckel/docker-airflow в ECS с Redis. Есть 4 потока планировщика и 4 рабочих задания Celery. Для задач, которые не выполняются, отображаются в состоянии очереди (серый значок), когда при наведении курсора на значок задачи оператор равен нулю, а в сведениях о задаче говорится:

    All dependencies are met but the task instance is not running. In most cases this just means that the task will probably be scheduled soon unless:- The scheduler is down or under heavy load

Метрики в планировщике не показывают большую нагрузку. Даг очень прост с 2 независимыми задачами, зависящими только от последнего запуска. В том же даге есть также задания, которые застряли без статуса (белый значок).

Интересно отметить, что когда я перезапускаю задачи планировщика, переходят в рабочее состояние.

Ответ 1

Воздушный поток может быть немного сложно настроить.

  • У вас работает airflow scheduler?
  • У вас работает airflow webserver?
  • Вы проверили, что для всех групп DAG, которые вы хотите запустить, в веб-интерфейсе установлено значение Вкл?
  • Все ли группы DAG, которые вы хотите запустить, имеют дату начала, которая в прошлом?
  • Все ли группы DAG, которые вы хотите запустить, имеют правильное расписание, которое отображается в веб-интерфейсе?
  • Если больше ничего не работает, вы можете использовать веб-интерфейс, чтобы щелкнуть значок, а затем в представлении графика. Теперь выберите первую задачу и нажмите на Экземпляр задачи. В разделе Подробности экземпляра задачи вы увидите, почему группа обеспечения доступности баз данных ожидает или не работает.

Например, у меня была группа доступности depends_on_past: True данных, которая была неправильно установлена в depends_on_past: True что запрещало запускать текущий экземпляр правильно.

Также отличный ресурс непосредственно в документации, в котором есть еще несколько советов: почему моя задача не запланирована? ,

Ответ 2

Я также использую репо Puckel/Docker-Airflow, в основном на Airflow 1.8 в течение года с экземплярами задач 10M+. Я думаю, что проблема сохраняется в 1.9, но я не уверен.

По какой-то причине, кажется, существует давняя проблема с планировщиком воздушного потока, где производительность снижается с течением времени. Я рассмотрел код планировщика, но мне все еще неясно, что именно происходит по-другому при новом запуске, чтобы вернуть его в обычное планирование. Одним из основных отличий является то, что запланированные и поставленные в очередь состояния задач перестраиваются.

Основные сведения о планировщике в вики Airflow предоставляют краткую справку о том, как работает планировщик и его различные состояния.

Большинство людей решают проблему с уменьшением пропускной способности планировщика, регулярно перезапуская планировщик. Лично я добился успеха с интервалом в 1 час, но видел так же часто, как каждые 5-10 минут. Объем вашей задачи, продолжительность задачи и параметры параллелизма стоит учитывать при экспериментировании с интервалом перезапуска.

Для получения дополнительной информации см.:

Раньше это решалось путем перезапуска каждого прогона X с использованием параметра конфигурации SCHEDULER_RUNS, хотя этот параметр был недавно удален из сценариев systemd по умолчанию.

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

Смежные вопросы

Ответ 3

Я сталкиваюсь с проблемой сегодня и обнаружил, что пункт 4 пули от ответа tobi6 ниже решал и решил проблему

*'Do all the DAGs you want to run have a start date which is in the past?'*

Я использую версию воздушного потока v1.10.3

Ответ 4

Моя проблема была на шаг впереди, в дополнение к тому, что мои задачи были поставлены в очередь, я не мог видеть ни одного из своих работников из сельдерея в пользовательском интерфейсе Flower. Решение состояло в том, что, поскольку я работал под управлением своего пользователя celery в качестве пользователя root, мне пришлось внести изменения в мой файл ~/.bashrc.

Следующие шаги сделали это работать:

  1. Добавьте экспорт C_FORCE_ROOT = true в ваш файл ~/.bashrc
  2. источник ~/.bashrc
  3. Запустить работника: nohup airflow worker $ * >> ~/airflow/logs/worker.logs &

Проверьте свой цветочный интерфейс по адресу http://{HOST}: 5555

Ответ 5

Еще одна вещь, которую нужно проверить, - "достиг ли параметр параллелизма вашего DAG?" ,

Я столкнулся с такой же ситуацией, когда некоторые задачи были показаны как НЕТ СТАТУСА.

Оказалось, что мои задачи File_Sensor выполнялись с таймаутом, установленным на 1 неделю, тогда как таймаут DAG составлял всего 5 часов. Это привело к тому, что файлов не было, одновременно работали многие сенсоры. Какие результаты параллелизма перегружены!

Зависимые задачи не могли быть запущены до того, как задача датчика была выполнена успешно, когда по истечении времени ожидания они получили НЕТ СОСТОЯНИЯ.

Мое решение:

  • Тщательно поставленные задачи и время ожидания DAG
  • Увеличьте dag_concurrency в файле airflow.cfg в папке AIRFLOW_HOME.

Пожалуйста, обратитесь к документации. https://airflow.apache.org/faq.html#why-isn-t-my-task-getting-scheduled

Ответ 6

У меня также была похожая проблема, но она в основном связана с SubDagOperator с более чем 3000 экземплярами задач (30 задач * 44 задачи подпадала).

Я обнаружил, что airflow scheduler основном отвечает за помещение запланированных заданий в "Слоты с очередями" (пул), в то время как airflow celery workers выбирают ваше задание в очереди и помещают его в "Используемые слоты" (пул). и запустить его.

Основываясь на вашем описании, ваш scheduler должен работать нормально. Я предлагаю вам проверить свой журнал "Сельдерей", чтобы увидеть, есть ли какая-либо ошибка, или перезапустить его, чтобы увидеть, помогает ли это или нет. У меня возникли проблемы с тем, что работники сельдерея обычно бастуют несколько минут, а потом снова начинают работать (особенно на SubDagOperator).

Ответ 7

Я считаю, что это проблема с версией сельдерея 4.2.1 и redis 3.0.1, как описано здесь:

https://github.com/celery/celery/issues/3808

мы решили эту проблему, понизив версию 2.10.6 для Redis:

redis==2.10.6