Почему планировщик Apache AirFlow чувствителен к всплескам рабочих нагрузок, из-за чего тормозит база данных метаданных, как исправить проблемы с файлом DAG, лог-файлами и внешними ресурсами: разбираемся с ошибками пакетного оркестратора и способами их решения.
Проблемы с планировщиком
Хотя Apache AirFlow позиционируется как довольно простой фреймворк для оркестрации пакетных процессов с низком порогом входа, начинающий дата-инженер может столкнуться со сложностями при его использовании. Например, с ошибками, способы решения которых не очевидны с первого взгляда. Одной из них является особенность работы планировщика, который можно перегрузить, что приведет к общему торможению пакетного конвейера. Это связано с тем, что Airflow выделяет время обработки для анализа каждого DAG, независимо от того, используется ли он на самом деле или нет.
Кроме того, рекомендуется поддерживать нагрузки на постоянном уровне, меняя время старта пакетного конвейера, поскольку AirFlow предназначен, прежде всего, для периодических запусков с часовыми интервалами, а не спонтанных и частых нагрузок. При этом следует понимать, что множество разных DAG, планируемые и запускаемые вместе, повышают нагрузку на AirFlow, создавая перегрузку трафика и снижая производительность пакетного оркестратора. Изменение времени запуска некоторых DAG может смягчить или предотвратить всплески нагрузки. Но при изменении расписания запуска придется переименовать DAG, поскольку предыдущие экземпляры задач больше не будут соответствовать новому интервалу планирования.
Если планировщик не справляется, следует проверить и настроить параметры его конфигурации в файле airflow.cfg. Можно увеличить частоту, с которой Airflow сканирует каталог DAG. По умолчанию это время равно 5 минут: каждые 300 секунд выполняется операция получения списка файлов DAG и их анализ. Если сделать эту операцию более редкой, нагрузка на ЦП сократится, однако, возникает риск несвоевременного запуска обновленного DAG, что может быть критичным для бизнеса. Также можно повысить количество процессов, которые планировщик может запускать параллельно.
Если для одновременного выполнения планируется много задач, надо увеличить количество запусков DAG в параметре max_active_runs_per_dg. Также можно повысить лимит по умолчанию в 16 задач в конфигурации airflow_celery_worker_concurrency (при использовании очереди Celery). Впрочем, стоит помнить, что этот лимит ограничен количеством одновременно работающих DAG. Поэтому целесообразно рассмотреть возможность добавления новых рабочих процессов Celery или ресурсов в планировщик.
Проблемы с DAG
Помимо планировщика AirFlow, проблемы могут возникнуть и с самим файлом DAG. В частности, если файл DAG неправильно импортируется в Airflow, в нем некорректно прописаны аргументы или не импортированы необходимые пакеты, фреймворк выдает ошибку. Например, ошибка unrecognized arguments случается, когда в аргументах DAG используется неизвестное фреймворку свойство. А исключение dag_id could not be found означает, что не удалось найти DAG с указанным идентификатором. Это может быть вызвано с проблемами в самом файле DAG, например, синтаксическими ошибками. Если же ошибок нет, причина проблемы может быть связана с конфигурацией AirFlow, когда каталог DAG указан неправильно. Следовательно, Airflow ищет файл цепочки задач не в том месте. Следует проверить конфигурацию развертывания Airflow в файле airflow.cfg.
Также причиной исключения dag_id could not be found может быть слишком медленная работа базы данных метаданных AirFlow, что приводит к тайм-ауту при загрузке DAG. В этом случае рекомендуется увеличить значение параметра dagbag_import_timeout в конфигурационном файле airflow.cfg. Эту проблему можно выявить, добавив параметр –raw к команде airflow run, который выявляет исходное исключение. В свою очередь, замедление базы данных метаданных может быть связано со слишком большим объемом XCom-объектов для обмена данными между задачами. В этом случае следует подключить в качестве хранилища данных пользовательский бэкенд, что стало возможно с версии Airflow 2.9. Также в производственных развертываниях вместо SQLlite рекомендуется использовать PostgreSQL для хранения метаданных, о чем мы писали здесь.
Data Pipeline на Apache Airflow
Код курса
AIRF
Ближайшая дата курса
27 ноября, 2024
Продолжительность
24 ак.часов
Стоимость обучения
72 000 руб.
Проблемы с выполнением задач в AirFlow
Наконец, могут возникнуть проблемы с самими задачами пакетного конвейера. Задачи могут не выполняться, если им не хватает памяти или других ресурсов. Airflow автоматически отключает задачи, выполнение которых занимает слишком много времени. Выделив больше ресурсов в развертывании, можно обеспечить более быстрое выполнение задач.
Ресурсов может не хватить и при использовании сенсоров – операторов, которые ожидают выполнения условий, работая непрерывно. Обычно отказ сенсора возникает, когда одновременные задачи превышают возможности рабочих процессов. В этом случае надо настроить логику для перепланирования сенсоров, когда не хватает рабочих слотов или запускать DAG через более частые промежутки времени. C Airflow 2.2 можно вообще отказаться от датчиков и вместо этого использовать отложенные операторы, которые не занимают ресурсов в ожидании условий. Узнать о параметрах задачи можно из ее контекста, о чем мы рассказываем в новой статье.
Внешние проблемы
Наконец, дата-инженер, использующий Airflow для оркестрации пакетных процессов, может столкнуться с проблемами, причины которых вообще не связаны с самим фреймворком, а вызваны внешними факторами. Например, внешние системы, на которых развернут AirFlow, такие как Linux и Kubernetes, могут завершать его процессы с помощью сигнала SIGTERM, о чем мы говорили здесь. Это может потребовать выделения дополнительных ресурсов для виртуальной машины, на которой развернут Airflow.
Также может случиться проблем с веб-сервисом, когда браузер не получает доступ к Airflow (статус HTTP-ответа 503). Это связано с веб-сервером, а не с Airflow или конвейером данных. Если у веб-сервера недостаточно ресурсов, может истечь время ожидания перед загрузкой или запуском DAG. В этом случае следует назначить ему больше памяти или вычислительной мощности или продлить период ожидания. Из-за того, как Airflow выполняет код, внешний по отношению к собственным операторам, его производительность может снизиться, когда логика требует выполнения большого количества запросов к внешней базе данных или вызовов внешнего API. В этом случае рекомендуется переместить логику обработки данных в другое место, например, в оператор Python.
В заключение отметим еще ошибку, которая связана с повреждением лог-файлов. Airflow выдает ошибку ValueError, если лог-файлы повреждены, отсутствуют или недоступны. Это мешает обработчику file.processor читать и обрабатывать логи, что приводит к появлению сообщения об ошибке. Вообще отсутствие логов обычно происходит из-за сбоя процесса в планировщике или в рабочем процессе. Также для исправления можно очистить экземпляр задачи в пользовательском интерфейсе Airflow и повторно запустить задачу, увеличить время ожидания получения журналов в файле log_fetch_timeout_sec или добавить ресурсы рабочим процессам.
Чтобы своевременно узнать об ошибках выполнения отдельной задачи или всего DAG, можно настроить отправку уведомлений, что рассматривается в новой статье.
Научитесь использовать Apache AirFlow для оркестрации пакетных процессов в задачах реальной дата-инженерии на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
- Data Pipeline на Apache AirFlow и Apache Hadoop
- AIRFLOW с использованием Yandex Managed Service for Apache Airflow™
Источники