3.4Kпросмотров
4 февраля 2022 г.
Score: 3.8K
#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