2022-02-04 17:00:54
#Airflow #Executors #BigData
Автор: Алексей Мелолян
Предполагается, что вы знакомы с основами Apache Airflow, озвученными в посте, в ином случае настоятельно рекомендуем ознакомиться.
Executor - механизм, посредством которого Apache Airflow запускает экземпляры задач (Task). В один момент времени Airflow может использовать только один вид Executor’a.
Executor может быть стандартным или кастомным, конкретный вид Executor’a присваивается в файле airflow.cfg переменной executor.
Список встроенных локальных Executor’ов:
- Debug Executor
- Local Executor
- Sequential Executor
Executor’ы, запускаемые удаленно:
- Celery Executor
- CeleryKubernetes Executor
- Dask Executor
- Kubernetes Executor
Рассмотрим каждый из них:
Sequential Executor. Используется Airflow по умолчанию после установки, может запускать только одну задачу в один момент времени и, как следствие, совместим с SQLite. Подходит только для теста Airflow, для продакшена рекомендуется использовать другие виды Executor’ов.
Debug Executor. Аналог Sequential Executor, но используется соответственно для отладки DAG’ов. Позволяет запускать DAG’и из командной строки.
Local Executor. Единственный более-менее полноценный локальный Executor. Может запускать несколько задач одновременно, требует для работы полноценной БД (PostgreSQL, MySQL прости Господи). При низких нагрузках - неплохой вариант, однако, с ростом количества одновременно запущенных DAG’ов, начинает лагать. Также не позволяет перезапускать DAG с произвольного места при падении, для этого необходимы Executor’ы, запускаемые удаленно.
Celery Executor. Работает с помощью Celery - асинхронной очереди задач, которая управляет воркерами - экземплярами сервиса, в данном случае Airflow, которые уже исполняют задачи. Для использования требует бэкенда в виде брокера сообщений, например, RabbitMQ или Redis. Данный Executor уже легко используется в продакшене, позволяет масштабировать работу Airflow на несколько машин, таким образом увеличивает устойчивость сервиса.
Kubernetes Executor. Исходя из названия, работает с кластером k8s. Имеет смысл только если вы уже используете кластер k8s, позволяет эффективнее использовать ресурсы по сравнению с Celery, а за счет использования контейнеров разработка новых задач становится более гибкой.
CeleryKubernetes Executor. Используется, когда необходимо иметь как распределенную высокую нагрузку, управляемую Celery, так и изолированные среды, создаваемые k8s.
Dask Executor. Используется на кластерах Dask - библиотеки Python для параллельных вычислений. Используется мало, очереди не поддерживает.
tl;dr: Сразу после установки переключайтесь на Local Executor, подключайте БД. Если количество DAG’ов растет - поднимайте брокер сообщений и переключайтесь на Celery Executor. Поднимаете Airflow на кластере k8s - Kubernetes Executor ваш выбор.
Полезные ссылки:
https://airflow.apache.org/docs/apache-airflow/stable/index.html - документация Airflow
https://www.bigdataschool.ru/news/airflow - статьи по Airflow на русском
@ruairflow - русское комьюнити Airflow
1.9K views14:00