задачи, очищенные потоком воздуха, не выполняются - PullRequest
5 голосов
/ 11 марта 2019

Преамбула

Еще один поток задач, не получая выполненный вопрос ...

В моем опыте с воздушным потоком все шло более-менее нормально, вплоть до этих выходных, пока все не пошло под откос.

Я проверил все стандартные вещи, например, как указано в этом полезном посте .

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

Окружающая среда

  • версия: воздушный поток 1.10.2
  • os: centos 7
  • питон: питон 3,6
  • virtualenv: да
  • Исполнитель: LocalExecutor
  • Бэкэнд БД: mysql

Проблема

Вот что происходит в моем устранении неисправностей бесконечного цикла / повторяющегося кошмара.

  1. Я сбрасываю базу метаданных (или, возможно, весь virtualenv, config и т. Д.) И повторно вводю информацию о соединении.
  2. Задачи будут выполнены один раз. Они могут преуспеть. Если я что-то пропустил в настройке, задача может завершиться неудачей.
  3. Когда задача не выполняется, она переходит в состояние повтора.
  4. Я исправляю проблему с (например, забыл ввести соединение) и вручную очищаю экземпляр задачи.
  5. Очищенные экземпляры задач не запускаются, а просто находятся в состоянии «нет»
  6. Попытки снова запустить dag не удаются.

До того, как у меня возникла эта проблема, после очистки экземпляра задачи она всегда очень быстро поднималась и выполнялась снова.

Но теперь очистка экземпляра задачи обычно приводит к зависанию экземпляра задачи в очищенном состоянии. Он просто сидит там.

Хуже того, если я попытаюсь завершить работу с меткой и всеми экземплярами и снова вызвать метку вручную, экземпляры задачи будут созданы, но останутся в состоянии «нет». Перезапуск планировщика не помогает.

Другие наблюдения

Это, вероятно, красная сельдь, но одна вещь, которую я заметил недавно, это то, что когда я нажимаю на иконку, представляющую экземпляры задачи, застрявшие в состоянии «нет», это приводит меня к фильтру представления «экземпляры задачи», который имеет неправильный фильтр; фильтр установлен на "строка равна нулю".

Но вам нужно переключить его на «string empty yes», чтобы он действительно возвращал экземпляры задачи, которые застряли.

Я предполагаю, что это просто несоответствующая ошибка пользовательского интерфейса, насколько я понимаю, красная сельдь, но я решил упомянуть об этом на всякий случай.

Редактировать 1

Я замечаю, что происходит какой-то "нулевой оператор": why is my operator null?  i will look into it

Редактировать 2

Является ли null допустимым значением состояния экземпляра задачи? Или это показатель того, что что-то не так.

Is it legit to have a null task instance state?

Редактировать 3

Подробнее none шт.

Вот некоторые биты со страницы сведений об экземпляре задачи. Многие атрибуты none:

Task Instance Details
Dependencies Blocking Task From Getting Scheduled
Dependency  Reason
Unknown 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
- The following configuration values may be limiting the number of queueable processes: parallelism, dag_concurrency, max_active_dag_runs_per_dag, non_pooled_task_slot_count
- This task instance already ran and had its state changed manually (e.g. cleared in the UI)

If this task instance does not start soon please contact your Airflow administrator for assistance.
Task Instance Attributes
Attribute   Value
duration    None
end_date    None
is_premature    False
job_id  None
operator    None
pid None
queued_dttm None
raw False
run_as_user None
start_date  None
state   None

Обновление

Я, наконец, могу что-то ...

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

Итак, я начал работать над настройкой докера на основе puckel / docker-airflow. Это тоже не было тривиальной задачей, потому что я решил использовать переменные окружения для всех параметров и соединений. Не все хуки разбирают URI соединения одинаково, поэтому вы должны быть осторожны, посмотреть на код и сделать несколько проб и ошибок.

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

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

1 Ответ

3 голосов
/ 20 марта 2019

Хорошо. Я закрываю это и отмечаю предполагаемую основную причину, поскольку на сервере не хватает места.

Был ряд факторов:

  1. На моем сервере не было много памяти. Всего 10 ГБ. Я не понимал, что это было так низко. Разрешение: добавить больше места
  2. Регистрация в потоке воздуха 1.10.2 стала немного сумасшедшей. Сообщение журнала INFO выводило Harvesting DAG parsing results каждую секунду или две, что в итоге приводило к большому файлу журнала. Разрешение: Это исправлено в коммите [AIRFLOW-3911] Change Harvesting DAG parsing results to DEBUG log level (#4729), который есть в 1.10.3, но вы всегда можете разветвиться и выбрать вишню, если вы застряли на 1.10.2.
  3. Кроме того, некоторые из параметров интервалов планировщика / веб-сервера могли бы выиграть от увеличения. В результате я получил файлы журнала размером в несколько ГБ. Я думаю, что это могло быть частично из-за изменения версий воздушного потока без корректного обновления airflow.cfg. Решение: при обновлении (или изменении версий) временно переместите airflow.cfg, чтобы сгенерировался cfg, совместимый с версией, а затем аккуратно объедините их. Другая стратегия состоит в том, чтобы полагаться только на переменные среды, чтобы ваша конфигурация всегда была как новая установка, а единственными параметрами в ваших переменных env являются переопределения параметров и, возможно, соединения.
  4. Airflow может не регистрировать ошибки где-либо в этом случае; все выглядело хорошо, за исключением того, что планировщик не ставил в очередь задания, или он ставил в очередь один или два, а затем просто останавливался без какого-либо сообщения об ошибке. Решения могут включать (1) добавить аварийные сигналы о нехватке пространства у вашего провайдера облачных вычислений, (2) выяснить, как гарантировать, что планировщик вызывает некоторые полезные исключения в этом случае, и отправьте их в поток воздуха.
...