Apache Airflow использует переменную окружения AIRFLOW_HOME
для назначения пути, где будут лежать логи, конфигурационные файлы, python код и прочая вспомогательная информация. По умолчанию путь ~/airflow
, переопределите эту переменную, если хотите изменить путь:
export AIRFLOW_HOME=~/airflow-data
Перед началом работы необходимо инициализировать настройки, подготовить базу данных. Для этого выполните команду:
airflow db init
После успешного выполнения этой команды в директории по пути AIRFLOW_HOME
будут созданы необходимые файлы. Airflow используется SQLite3 в качестве базы данных по умолчанию (файл airflow.db
). Разумеется в продакшене не рекомендуется её использовать, т.к. SQLite3 ограничен SequentialExecutor (об Executor поговорим позже) и как следствие ограничение в масштабировании ваших пайплайнов.
airflow.cfg
это конфигурационный файл Apache Airflow. В нём можно поменять базу данных, указать иной способ запуска задач, изменить путь до python кода и др. Если вы меняете базу, то после сохранения настроек необходимо повторно выполнить команду airflow db init
, чтобы создать все необходимые таблицы в базе.
В docker-compose.yml
используется контейнер с PostgreSQL. Если вы не хотите использовать docker-compose, то PostgreSQL можно запустить как отдельный контейнер с пробросом портов или установить локально. Давайте запустим PostgreSQL в изолированном контейнере. Про локальную установку и настройку можно почитать в моей шпаргалке.
Выполните команду:
docker run -d -p 6666:5432 -e POSTGRES_PASSWORD=password -e POSTGRES_USER=airflow -e POSTGRES_DB=airflow -v postgres_data_airflow:/var/lib/postgresql/data postgres:13.1
Будет создана база данных airflow
и пользователь airflow
с паролем password
. На хост машине база будет доступна по порту 6666. Также я создаю volume, чтобы после остановки контейнера все данные были сохранены. Контейнер запускается в фоновом режиме (ключ -d
).
Теперь необходимо прописать настройки в конфигурационном файле. Откройте airflow.cfg
и найдите строчку с sql_alchemy_conn
и executor
. Присвойте им новые значения:
executor = LocalExecutor
sql_alchemy_conn = postgresql+psycopg2://airflow:password@localhost:6666/airflow
Про Executor мы более детально поговорим в следующем разделе.
А сейчас нужно повторно инициализировать базу данных командой:
airflow db init
В Airflow 2.0 появилась авторизация по умолчанию, поэтому перед запуском сервера нам необходимо создать пользователя-админа.
airflow users create \
--username airflow \
--firstname Airflow \
--lastname Apache \
--role Admin \
--email airflow@example.com \
--password airflow
Теперь можно запустить веб-сервер, чтобы поглядеть на пользовательский интерфейс Apache Airflow:
airflow webserver -p 8080
Приветствую! Apache Airflow не поддерживает установку в Windows, рабочий вариант воспользоваться WSL2.
Иногда до инициализации БД надо еще доустановить библиотеку pip install SQLAlchemy==1.3.24
Друзья, кто столкнулся с ошибкой: docker: Got permission denied while trying to connect to the Docker daemon socket at unix. Решение: sudo chmod 666 /var/run/docker.sock
Адиль Привет, устанавливаю переменную окружения export AIRFLOW_HOME=~/airflow-data после переоткрытия сессии она исчезает. Это нормально, и она нужна только во время установки или она нужна на постоянной основе и ее нужно както закрепить?
Привет! Она всегда нужна, можно прописать её установку в ~/.profile или .bashrc (в зависимости от шелла), тогда при открытии шелла команда будет выполняться автоматически.
А как это все запускать после того как перезагрузил компьютер? Надо ли заново создавать пользователя и инициализировать бд еще раз?
БД инициализировать снова не нужно. Если речь про локальный компьютер, то нужно будет снова запустить веб-сервер и планировщик. Если речь про сервер, то в разделе Делой Apache Airflow есть полная инструкция подготовки production-ready решения.
А в init автор курса уже прописал airflow db init
У меня возникла проблема from wtforms.compat import string_types, text_type ModuleNotFoundError: No module named 'wtforms.compat' Решил с поощью https://stackoverflow.com/questions/69879246/no-module-named-wtforms-compat
Адиль, подскажи пожалуйста, я всё сделал по инструкции, но при повторной инициализации базы пишет что не может подключиться к базе postgresql (sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) connection to server at "localhost" (127.0.0.1), port 6666 failed: Connection refused. Is the server running on that host and accepting TCP/IP connections?). При этом через Dbeaver я спокойно подключаюсь к базе по реквизитам из образа. Не могу понять что не так
Антон, не хватает контекста. Как запускается Airflow и в какой среде? Изначально он работал получается, а после перезапуска перестал работать?
Anton Tanachev, у меня произошла такая же ошибка. Мне помогло вернуть config в исходный вид (airflow config list --defaults > "${AIRFLOW_HOME}/airflow.cfg" или вручную исправить переменные executor и sql_alchemy_conn). А затем выполнить все действия из этого шага заново
Alexandr Konovalov 5 Июнь 2021
Добрый день. Пытаюсь установить airflow на windows 10 и после установки всех пакетов и попытки выполнить airflow db init выдает ошибку - WARNING:root:OSError while attempting to symlink the latest log directory ModuleNotFoundError: No module named 'termios' подскажите как поправить? насколько я понимаю он ругается на папку установки и требует пакет, который идет только для unix систем...