Как аналитику развернуть локальный эирфлоу и прокинуть хуки в бд?

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Кому можем быть полезна эта статья?

  • В вашей компании вообще нету эирфлоу или аналога.

  • У вас есть эирфлоу но тестирование дага можете проводить только на проде, нету стейджа ( деф контура). А если на прод еще и апрув нужен то это вообще сказка.

  • Вы еще не работает в компании, а на интервью уже спрашивают опыт (для джунов).

Узнали себя? Тогда погнали!

Сперва устанавливаем доцкер, делается это одной строкой brew install docker детально можно прочитать в предыдущей статье.

И переходим собственно к созданию образа эирфлоу. Работать я буду в PyCharm.

  • Создаем новый проект, назовем его airflow.

  • В нем создаем файл с именем docker-compose.yml
    И прокидываем в него:

version: '3.8'

services:
  airflow-webserver:
    build: .
    command: webserver
    image: apache/airflow:2.6.0
    environment:
      - PYTHONPATH=/opt/airflow
      - AIRFLOW__CORE__EXECUTOR=LocalExecutor
      - AIRFLOW__DATABASE__SQL_ALCHEMY_CONN=postgresql+psycopg2://airflow:airflow@airflow-postgres:5432/airflow
      - AIRFLOW__WEBSERVER__SECRET_KEY=your_secret_key
      - AIRFLOW__WEBSERVER__WORKERS=4
      - AIRFLOW__WEBSERVER__WEB_SERVER_PORT=8080
    ports:
      - "8080:8080"
    volumes:
      - /<Абсолютный путь к проекту>/dags:/opt/airflow/dags
      - /<Абсолютный путь к проекту>/logs:/opt/airflow/logs
      - /<Абсолютный путь к проекту>/plugins:/opt/airflow/plugins
      - /<Абсолютный путь к проекту>/connections:/opt/airflow/connections 
    depends_on:
      - airflow-scheduler
      - airflow-postgres

  airflow-scheduler:
    build: .
    command: scheduler
    image: apache/airflow:2.6.0
    environment:
      - PYTHONPATH=/opt/airflow
      - AIRFLOW__CORE__EXECUTOR=LocalExecutor
      - AIRFLOW__DATABASE__SQL_ALCHEMY_CONN=postgresql+psycopg2://airflow:airflow@airflow-postgres:5432/airflow
    volumes:
      - /<Абсолютный путь к проекту>/dags:/opt/airflow/dags
      - /<Абсолютный путь к проекту>/logs:/opt/airflow/logs
      - /<Абсолютный путь к проекту>/plugins:/opt/airflow/plugins
      - /<Абсолютный путь к проекту>/connections:/opt/airflow/connections  # Добавлено
    depends_on:
      - airflow-postgres
  airflow-init:
    build: .
    command: >
      bash -c "
      airflow db init &&
      airflow users create --username admin --firstname Admin --lastname User --role Admin --email admin@example.com --password admin
      "
    image: apache/airflow:2.6.0
    environment:
      - PYTHONPATH=/opt/airflow
      - AIRFLOW__CORE__EXECUTOR=LocalExecutor
      - AIRFLOW__DATABASE__SQL_ALCHEMY_CONN=postgresql+psycopg2://airflow:airflow@airflow-postgres:5432/airflow
    volumes:
      - /<Абсолютный путь к проекту>/dags:/opt/airflow/dags
      - /<Абсолютный путь к проекту>/logs:/opt/airflow/logs
      - /<Абсолютный путь к проекту>/plugins:/opt/airflow/plugins
      - /<Абсолютный путь к проекту>/connections:/opt/airflow/connections  # Добавлено
    depends_on:
      - airflow-scheduler
      - airflow-postgres

  airflow-postgres:
    image: postgres:13
    environment:
      POSTGRES_USER: airflow
      POSTGRES_PASSWORD: airflow
      POSTGRES_DB: airflow
    ports:
      - "5434:5432"  # Или измените на "5434"
  • Да страшно, но таков пусть самурая.
    И нужно еще кое-что локализовать.
    Берем абсолютный путь к проекту который мы создали и вставляем всюду вместо <Абсолютный путь к проекту> в файле выше.
    К примеру у меня путь выглядит вот так:
    /Users/i.ivanov/PycharmProjects/airflow и тогда в volumes мы вставляем:
    - /Users/i.ivanov/PycharmProjects/airflow/dags:/opt/airflow/dags

  • Создаем Dockerfile с содержимым:

FROM apache/airflow:2.6.0
USER root
#USER root  # Переход на пользователя root для установки

# Установка необходимых пакетов для компиляции
RUN apt-get update && \
    apt-get install -y gcc g++ python3-dev && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# Возвращаемся к пользователю airflow
#USER airflow
USER airflow
# Копируем файл requirements.txt в контейнер
COPY requirements.txt .

# Устанавливаем зависимости
RUN pip install --no-cache-dir -r requirements.txt
  • Знаю вам это не нравится, но уверяю осталось немного)
    Создаем requirements.txt и записываем в него:

pandas==1.3.5
sqlalchemy==1.4.49
clickhouse-sqlalchemy==0.2.0

Этот файл вам будет полезен если в ваших дагах не будет хватать либ.
Можете добавить по аналогу ( после добавления нужно будет рестартнуть эирфлоу ).
При добавлении надо следить чтобы не было конфликта версий, но можете на авось добавить, если что конфликт все равно вылезет при билде.

  • И теперь правда все!
    Переходим в докер и через терминал поднимаем приложение:
    docker-compose -f /<Абсолютный путь к проекту>/docker-compose.yml up --build

    Билдемся потихоньку ..
    Билдемся потихоньку ..

Дальше как обычно молимся смотрим на логи чтобы не было ошибок.
Если вы поднялись и все хорошо то веб версия доступна по адресу http://localhost:8080/home
Логин/пароль: admin/admin.


На выходе вы получите настоящий airflow с полным админом.
В проекте будет тестовый даг который читает из кх и пишет в него же таблицу.
Нужно только в хуке вставить свои креды /airflow/connections .
По аналогии можно прокинуть хук к другой бд.
Удобно сделать хуки максимально похожими на те которые у вас в компании ( именно с точки зрения как они выглядят и используются в даге, а не само их определение ).
Импорт дага из репозитория не требует отдельной команды, это происходит автоматически почти мгновенно.
Если вы нуждаетесь в развертывании в облаке, то у ЯО есть готовое решение)

Источник: https://habr.com/ru/articles/873668/


Интересные статьи

Интересные статьи

Думаю почти каждому нравиться сборка ПК (сам процесс), а также в последнее время многие как хобби (в IT) начинают увлекаться ручной работой по дереву, металлу и т.д. Вот и я решил выбрать чем зан...
Раньше я часто играл в компьютерные игры, и в последнее время стал интересоваться о том, как они устроены. Углубившись в теме, я понял, что опыт игрока зависит от множества факторов, на каждый из кото...
Доброго времени суток. При работе с Bitrix-инфраструктурой в определенный момент вы можете столкнуться с проблемой увеличения времени открытия различных страниц на вашей площадке (сайте), медленн...
Привет, друзья! Меня зовут Петр, я представитель малого белорусского бизнеса со штатом чуть более 20 сотрудников. В данной статье хочу поделиться негативным опытом покупки 1С-Битрикс. ...
Есть статьи о недостатках Битрикса, которые написаны программистами. Недостатки, описанные в них рядовому пользователю безразличны, ведь он не собирается ничего программировать.