Apache Airflow имеет множество зависимостей, поэтому установка может быть проблематичной. В отличие от 1-й версии, Airflow 2 устанавливается гораздо проще. В этой статье разберем установку Apache Airflow через пакетный менеджер pip и через Docker.
Локальная установка Apache Airflow
Apache Airflow был протестирован на:
- Python: 3.6, 3.7, 3.8, 3.9
- СУБД (Система управления базами данных):
- PostgreSQL: 9.6, 10, 11, 12, 13
- MySQL: 5.7, 8
- SQLite: 3.15.0+
- Kubernetes: 1.18.15, 1.19.7, 1.20.2
СУБД необходима для управления метаданными. SQLite применяется только для тестирования, в реальности лучше использовать PostgreSQL или MySQL.
Как минимум на вашей системе должны быть установлены следующие пакеты (ещё можно добавить PostgreSQL или MySQL):
sudo apt-get install -y --no-install-recommends \ freetds-bin \ krb5-user \ ldap-utils \ libffi6 \ libsasl2-2 \ libsasl2-modules \ libssl1.1 \ locales \ lsb-release \ sasl2-bin \ sqlite3 \ unixodbc
Сам Apache Airflow устанавливается достаточно просто — через пакетный менеджер pip. В репозитории conda-forge
также имеется Airflow, поэтому через менеджер conda он также доступен. К сожалению, при использовании других пакетных менеджеров вроде poetry
и pip-tools
придется самостоятельно конвертировать список зависимостей в нужный формат.
Не забудьте создать отдельную виртуальную среду, например, через python venv
. Вам понадобится достаточно длинный список зависимостей (constraints), который в свою очередь зависит от версий Python и Airflow. Итак, для установки платформы Apache Airflow требуется дать следующие команды командному интерпретатору:
# airflow нужна отдельная директория # например, для установки в домашней директории добавьте: $ export AIRFLOW_HOME=~/airflow # правильно было бы также создать среду в этой директории: # python3 -m venv myvenv # source bin/activate # Новая версия - 2.1.3, однако в conda-forge лежит 2.1.2 $ AIRFLOW_VERSION=2.1.3 $ PYTHON_VERSION="$(python --version | cut -d " " -f 2 | cut -d "." -f 1-2)" $ CONSTRAINT_URL="https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-${PYTHON_VERSION}.txt" $ pip install "apache-airflow==${AIRFLOW_VERSION}" --constraint "${CONSTRAINT_URL}"
CONSTRAINT_URL
— ссылка на файл со списком зависимостей. В директории $AIRFLOW_HOME
создаться конфигурационный файл airflow.cfg
. Из коробки будет использоваться SQLite, который не поддерживает распаралелливание. SQLite работает с исполнителем SequentialExecutor, который выполняет задачи последовательно. В production использовать их не стоит, но для ознакомления и тестирования можно попробовать.
На этом установка завершена. Можете инициализировать базу данных, запустить планировщик (scheduler) и веб-сервер:
$ airflow db init $ airflow webserver --port 8080 # Откройте новый терминал и запустите планировщик: $ airflow scheduler
По умолчанию стоит только один пользователь с именем и паролем airflow
. Создаются пользователи так:
$ airflow users create \ --username admin \ --firstname Peter \ --lastname Parker \ --role Admin \ --email spiderman@superhero.org
Установка через Docker
Если же не получилось установить Apache Airflow локально, то используйте Docker. Вам понадобится сам Docker и Docker Compose.
Требуется скачать конфигурационный файл YAML. Через него вы будете запускать Apache Airflow. Создайте директорию и скачайте в нее файл:
$ mkdir airflow $ cd airflow $ curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.1.3/docker-compose.yaml'
Этот файл содержит следующие сервисы:
airflow-scheduler
— планировщик, который отслеживает все задачи и DAG’и, а также запускает экземпляры задач.airflow-webserver
— веб-сервер, доступный по адресу http://localhost:8080.airflow-worker
— воркер, который выполняет задачи, поставленные планировщиком.airflow-init
— служба инициализации.flower
— приложение для мониторинга задач. Он доступен по адресу http://localhost:5555.postgres
— СУБД.redis
— хранилище данных, которое пересылает сообщения от планировщика воркеру.
Исполнителем при такой конфигурации является Celery Executor, который как раз готов для использования в production.
В Linux вы должны убедиться, что контейнер и хост-компьютер имеют соответствующие права доступа к файлам. Делается это следующим образом:
$ echo -e "AIRFLOW_UID=$(id -u)\nAIRFLOW_GID=0" > .env
Создайте дополнительные директории, в которые будут записываться ваши DAG’и, логи и плагины:
$ mkdir -p ./dags ./logs ./plugins
А теперь нужно поднять сам докер-контейнер со всеми сервисами:
$ docker-compose up airflow-init
Каждый раз, когда понадобится Apache Airflow, то нужно зайти в эту директорию и запустить команду выше. Теперь можете инициализировать базу данных (в данном случае Postgres) и начать работать.
В следующей статье создадим свой первый граф (DAG). А о том, как автоматизировать разработку конвейеров данных на реальных примерах вы узнаете на специализированном курсе «AIRF: Курс Apache AirFlow» в лицензированном учебном центре обучения и повышения квалификации разработчиков, менеджеров, инженеров данных, администраторов, Data Scientist’ов и аналитиков Big Data в Москве.
Источники