Как использовать Apache Airflow в виртуальной среде? - PullRequest
0 голосов
/ 04 июля 2019

Я совершенно новичок в использовании Apache Airflow. Я использую Pycharm в качестве моей IDE. Я создаю проект (среда анаконды), создаю скрипт на python, который включает определения DAG и операторы Bash. Когда я открываю свой веб-сервер airflow, мои DAGS не отображаются. Показаны только примеры DAG по умолчанию. Моя переменная AIRFLOW_HOME содержит ~/airflow. Так что я сохранил свой скрипт на Python там, и теперь он показывает.

Как мне использовать это в среде проекта?

Могу ли я изменить переменную среды в начале каждого проекта?

Есть ли способ добавить определенные домашние каталоги воздушного потока для каждого проекта?

Я не хочу хранить свои группы доступности баз данных в каталоге airflow по умолчанию, так как я хочу добавить его в свой репозиторий git. Пожалуйста, помогите мне.

Ответы [ 2 ]

0 голосов
/ 07 июля 2019

Вы можете установить / переопределить параметры воздушного потока, указанные в ${AIRFLOW_HOME}/airflow.cfg, с помощью переменных среды, используя этот формат: $ AIRFLOW __ {SECTION} __ {KEY} (обратите внимание на двойное подчеркивание).Вот ссылка на документы по воздушному потоку.Таким образом, вы можете просто сделать

export AIRFLOW__CORE__DAGS_FOLDER=/path/to/dags/folder

Однако, это утомительно и из-за ошибок делать это для разных проектов.В качестве альтернативы вы можете рассмотреть возможность использования pipenv для управления виртуальными средами вместо anaconda.Вот хорошее руководство о pipenv и проблемах, которые оно решает.Одна из функций по умолчанию из pipenv заключается в том, что она автоматически загружает переменные, определенные в файле .env, когда вы запускаете оболочку с активированной virtualenv.Итак, вот как может выглядеть ваш рабочий процесс с pipenv:

cd /path/to/my_project

# Creates venv with python 3.7 
pipenv install --python=3.7 Flask==1.0.3 apache-airflow==1.10.3

# Set home for airflow in a root of your project (specified in .env file)
echo "AIRFLOW_HOME=${PWD}/airflow" >> .env

# Enters created venv and loads content of .env file 
pipenv shell

# Initialise airflow
airflow initdb
mkdir -p ${AIRFLOW_HOME}/dags/

Примечание: использование Flask==1.03 я объясню в конце, но это потому, что pipenv проверяет, есть ли подчиненные зависимостисовместимы для обеспечения воспроизводимости.

Таким образом, после этих шагов вы получите следующую структуру проекта

my_project
├── airflow
│   ├── airflow.cfg
│   ├── airflow.db
│   ├── dags
│   ├── logs
│   │   └── scheduler
│   │       ├── 2019-07-07
│   │       └── latest -> /path/to/my_project/airflow/logs/scheduler/2019-07-07
│   └── unittests.cfg
├── .env
├── Pipfile
└── Pipfile.lock

Теперь, когда вы инициализируете поток воздуха в первый раз, он создаст ${AIRFLOW_HOME}/airflow.cfg файл и будет использовать / раскрыть ${AIRFLOW_HOME}/dags в качестве значения для dags_folder.В случае, если вам все еще нужно другое место для dags_folder, вы можете снова использовать .env файл

echo "AIRFLOW__CORE__DAGS_FOLDER=/different/path/to/dags/folder" >> .env

Таким образом, ваш .env файл будет выглядеть так:

AIRFLOW_HOME=/path/to/my_project/airflow
AIRFLOW__CORE__DAGS_FOLDER=/different/path/to/dags/folder

Что мы достигли и почему это будет работать просто отлично

  1. Поскольку вы установили airflow в виртуальной среде, вам необходимо активировать его, чтобы использовать airflow
  2. .вы сделали это с pipenv, вам нужно будет использовать pipenv shell для активации venv
  3. Поскольку вы используете pipenv shell, вы всегда будете получать переменные, определенные в .env, экспортированные в ваш venv.Вдобавок к этому pipenv все еще будет подоболочкой, поэтому, когда вы выйдете из нее, все дополнительные переменные среды также будут очищены.
  4. Различные проекты, использующие воздушный поток, будут иметь разные места для своих файлов журналов и т. Д..

Дополнительные примечания по pipenv

  1. Чтобы использовать venv, созданный с помощью pipenv, в качестве интерпретатора проекта вашей среды IDE, используйте путь, предоставленный pipenv --py.
  2. По умолчанию pipenv создает все venvs в том же глобальном местоположении, что и conda, но вы можете изменить это поведение на создание .venv в корне проекта, добавив export PIPENV_VENV_IN_PROJECT=1 в .bashrc (или другой rc).Тогда PyCharm сможет автоматически поднять его, когда вы войдете в настройки интерпретатора проекта.

Примечание по использованию Flask==1.0.3

Воздушный поток 1.10.3 из PyPi зависит от flask>=1.0, <2.0 и jinja2>=2.7.3, <=2.10.0.Сегодня, когда я тестировал фрагменты кода, последний доступный flask был 1.1.0 , который зависит от jinja2>=2.10.1.Это означает, что хотя pipenv может установить все необходимое программное обеспечение, но оно не может заблокировать зависимости.Поэтому для чистого использования моих примеров кода мне пришлось указать версию flask, для которой требуется версия jinja2, совместимая с требованиями воздушного потока.Но не о чем беспокоиться.Последняя версия airflow на GitHub уже исправлена.

0 голосов
/ 06 июля 2019

Отредактируйте файл airflow.cfg и установите:

load_examples = False
dags_folder = /path/to/your/dag/files

Если для вашего каталога airflow не задано значение по умолчанию, вам следует установить эту переменную env.если раздражает каждый раз менять его, просто установите его в конфигурации проекта pycharm или в локальной ОС (~ / .bashrc).

Я предлагаю написать крошечный скрипт для выполнения воздушного потока в локальном режиме.,вам следует запускать веб-сервер воздушного потока, планировщик и рабочих по отдельности.

Для меня гораздо удобнее запускать службы воздушного потока на небольшой машине разработки, подумайте об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...