2 способа установки Apache Airflow

2 способа установки Apache Airflow

    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 в Москве.

    Источники

    1. Документация: локальная установка
    2. Документация: установка через Docker