Как сменить SQLLite на PostgreSQL для бэкенда Apache AirFlow

администрирование Apache AirFlow, бэкенд Apache AirFlow, база данных метаданных Apache AirFlow, управление Apache AirFlow, обучение Apache AirFlow, курсы по AirFlow, обучение дата-инженеров, инженерия данных примеры курсы обучение, Школа Больших Данных Учебный Центр Коммерсант

Зачем менять базу данных метаданных в производственном развертывании Apache AirFlow и как это сделать: пошаговое руководство для дата-инженера с примерами и рекомендациями.

5 шагов перехода от SQLLite к PostgreSQL: миграция базы данных метаданных Apache AirFlow

Чтобы планировать и запускать конвейеры обработки данных, Apache AirFlow хранит сведения о задачах, DAG, исполнителях, планировщиках и других своих компонентах во встроенном или внешнем хранилище – базе данных метаданных. По умолчанию AirFlow поставляется с легковесной встраиваемой реляционной СУБД SQLLite. Для SQLite не требуется сервер базы данных, а сама БД хранится в локальном файле. Это вполне подходит для изучения фреймворка и личных пет-проектов, но крайне не рекомендуется для производственного использования из-за большого количества ограничений SQLite. В частности, SQLite работает только с последовательным исполнителем (SequentialExecutor), что означает невозможность параллельной обработки информации: задачи выполняются последовательно, одна за другой. Поэтому для работы с большим объемом данных и высокими нагрузками обычно используются Celery, Dask или Kubernetes, о чем мы писали здесь.

Что касается бэкенда, для производственного развертывания AirFlow лучше выбирать PostgreSQL (версия 12, 13, 14, 15 или 16) или MySQL 8.0. В официальной документации фреймворка подчеркивается, что, несмотря на сходство MySQL и MariaDB, последняя не подходит для использования в качестве серверной части AirFlow из-за разных подходов к индексации и других неочевидных отличий.

Чтобы запустить миграцию базы данных метаданных с SQLite на PostgreSQL, надо запустить команду airflow db migrate, предварительно остановив все работающие компоненты AirFlow. Но перед этим следует создать базу данных PostgreSQL, а также пользователя с ролью администратор, который будет обладать всеми необходимыми правами:

CREATE DATABASE airflow_db;
CREATE USER airflow_user WITH PASSWORD 'airflow_pass';
GRANT ALL PRIVILEGES ON DATABASE airflow_db TO airflow_user;

При использовании 15-ой версии PostgreSQL нужны дополнительные привелегии:

USE airflow_db;
GRANT ALL ON SCHEMA public TO airflow_user;

При этом экземпляр PostgreSQL должен поддерживать кодировку UTF-8. Кроме того, следует включить пользователя airflow_user в список управления доступом к этой базе данных, отразив это в конфигурационном файле pg_hba.conf. Также надо изменить созданного пользователя, установив схему данных по умолчанию:

ALTER USER airflow_user SET search_path = public;

Параметр search_path определяет схемы, которые база данных будет искать по умолчанию при выполнении запросов. Если схема не указана явно в запросе, база данных сначала будет искать объекты (таблицы, функции и т. д.) в схемах, перечисленных в параметре search_path. В PostgreSQL именно схема public используется по умолчанию и должна быть доступна всем пользователям. Кроме того, ORM-библиотека SqlAlchemy, обеспечивающая взаимодействие Python-объектов с базой данных метаданных, не позволяет указать конкретную схему в URI подключения. Поэтому нужно убедиться, что схема public находится в search_path пользователя PostgreSQL.

После настройки базы данных ее следует инициализировать с помощью команды

airflow db migrate

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

export AIRFLOW__DATABASE__SQL_ALCHEMY_CONN="postgresql+psycopg2://airflow_user:airflow_pass@host:5432/airflow_db"

При использовании SQLAlchemy версии 1.4.0+, необходимо использовать протокол postgresql:// и драйвер psycopg2, который указывается в строке подключения SqlAlchemy.

После этого надо создать соединение через пользовательский интерфейс фреймворка, указав идентификатор и тип подключения, хост, схема, логин и пароль созданного пользователя, а также порт 5432.

После выполнения всех указанных действий в конфигурационном файле airflow.cfg отобразится актуальная информация об исполнителе и базе данных метаданных, допустимая для производственного использования.

Конфигурационный файл AirFlow (airflow.cfg)
Конфигурационный файл AirFlow (airflow.cfg)

В заключение отметим, что при смене SQLite на PostgreSQL надо учитывать особенности этой СУБД. В частности, помнить о том, что в PostgreSQL каждое соединение создает новый процесс, потребляя много ресурсов. А AirFlow открывает множество подключений к базе данных метаданных. Поэтому рекомендуется использовать PGBouncer в качестве прокси-сервера базы данных для всех производственных установок PostgreSQL. Балансировщик PGBouncer может обрабатывать пул соединений из нескольких компонентов и сделает подключение к БД более устойчивым к временным сетевым проблемам.

Закрытие подключения к базе данных метаданных на работающем экземпляре AirFlow приводит к ошибке. Это особенно важно при использовании внешней СУБД в качестве бэкенда. Для облачных сервисов PostgreSQL, следует настроить конфигурацию keepalives_idle в параметрах соединения и установить значение меньше времени простоя, чтобы службы не закрывали простаивающие соединения после некоторого времени бездействия (около 5 минут). Для этого в конфигурационном файле airflow_local_settings.py надо настроить значения keepalive-аргументов, например, так:

keepalive_kwargs = {
    "keepalives": 1,
    "keepalives_idle": 30,
    "keepalives_interval": 5,
    "keepalives_count": 5,
}

Освоить на практике лучшие приемы использования Apache AirFlow в задачах дата-инженерии вам помогут специализированные курсы в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.

Источники

  1. https://airflow.apache.org/docs/apache-airflow/stable/howto/set-up-database.html
  2. https://www.restack.io/docs/airflow-knowledge-apache-change-database
  3. https://betterdatascience.com/apache-airflow-parallelism/
Поиск по сайту