- Зачем: - Пример базовой загрузки CSV перенесен в отдельный репозиторий `airflow-manual` для разделения учебных треков. - Что: - удалены DAG-файлы `csv_to_greenplum` и вспомогательные скрипты `helpers/greenplum.py`, `orders_ddl.sql`. - из `docker-compose.yml` и `.env.example` удалены переменные и тома (`airflow_data`), необходимые для CSV. - очищена документация (`README.md`, `TESTING.md`, `educational-tasks.md`) и тесты (`test_dags_smoke.py`, `conftest.py`). - отмечен выполненным 'Этап 1' в `TODO.md`. - Проверка: - `make test` проходит успешно (smoke-тесты оставшихся DAG-ов не затронуты).
5.8 KiB
Технические детали стенда (Docker / Airflow / Greenplum)
Этот документ не обязателен для прохождения лабораторных, но полезен, если вы:
- хотите понять, как устроен стенд “под капотом”;
- меняете конфиги/зависимости и пересобираете образы;
- отлаживаете проблемы со стартом Greenplum/PXF или Connections в Airflow.
Make (опционально, но удобно)
Если make не установлен, можно пользоваться docker compose ....
Но с make команды короче и проще.
Установка make (если нужно):
- Linux (Debian/Ubuntu):
sudo apt install -y make - macOS:
brew install make - Windows:
- WSL:
sudo apt install -y make - Chocolatey:
choco install make - Scoop:
scoop install make
- WSL:
Примеры:
make up
make logs
make gp-psql
Airflow Connections
Готовые DAG по умолчанию подключаются к БД через Airflow Connections:
greenplum_conn— Greenplum;bookings_db— демо‑БД bookings (bookings-db).
В docker-compose.yml Connections задаются через переменные окружения AIRFLOW_CONN_...,
поэтому они могут не отображаться в UI — для DAG это нормально.
Если нужно завести вручную:
- Airflow UI → Admin → Connections → Add a new record
- Пример для Greenplum:
- Conn Id:
greenplum_conn - Conn Type:
Postgres - Host:
greenplum - Schema:
gp_dwh - Login/Password:
gpadmin/gpadmin - Port:
5432
- Conn Id:
PXF (в 5 строк)
PXF (Platform Extension Framework) — компонент Greenplum для работы с внешними источниками.
В этом стенде PXF используется для чтения таблицы bookings.bookings из Postgres прямо из Greenplum
через внешнюю таблицу stg.bookings_ext. Поэтому загрузка в stg.bookings выглядит как обычный
INSERT ... SELECT без промежуточных файлов.
Greenplum + PXF: свой образ
Greenplum собирается из собственного Dockerfile.greenplum, чтобы:
- не ловить проблемы с правами/
chownпри bind‑mount конфигов; - держать PXF‑конфиги и JDBC‑драйвер внутри образа;
- делать старт контейнера идемпотентным.
При старте контейнера:
- seed‑конфиги PXF докладываются в
PXF_BASEна persistent volume; - создаются каталоги
PXF_BASE/runиPXF_BASE/logs; - расширение
pxfсоздаётся автоматически, когда Greenplum становится доступен (с ретраями).
Полезные команды:
make build # пересобрать образы
docker compose ps # проверить health
Перезапись seed‑файлов в PXF_BASE:
PXF_SEED_OVERWRITE=1— перезаписать конфиги при старте;PXF_SYNC_ON_START=1— выполнитьpxf cluster syncпри старте.
Подробнее: docs/internal/pxf_bookings.md.
Airflow: свой образ
Airflow тоже собирается из собственного Dockerfile.airflow, чтобы зависимости ставились при сборке,
а не во время старта контейнеров.
Если меняли airflow/requirements.txt или Dockerfile.airflow, пересоберите образы:
make build
make up
Локальное окружение разработчика (uv)
Локальным окружением управляет uv — он создаёт .venv из pyproject.toml / uv.lock.
uv sync
make test
make lint
make fmt
Не устанавливайте зависимости через pip install --user ... — это часто ломает окружение и IDE.
Переменные окружения (.env)
Все настройки лежат в .env (шаблон: .env.example).
Порты на хосте
AIRFLOW_WEB_PORT— Airflow UI (по умолчанию8080)PGMETA_PORT— мета‑БД Airflow (по умолчанию5433, обычно нужно только для диагностики)BOOKINGS_DB_PORT— bookings-db (по умолчанию5434)GP_HOST_PORT— Greenplum (по умолчанию5435)
Greenplum
GP_USER,GP_PASSWORD,GP_DBGP_PORT— внутренний порт в Docker-сети (обычно5432)GP_HOST_PORT— внешний порт на хосте (по умолчанию5435)
bookings-db (Postgres)
BOOKINGS_DB_USER,BOOKINGS_DB_PASSWORDBOOKINGS_DB_PORT— внешний порт (по умолчанию5434)BOOKINGS_START_DATE— стартовая дата модельного времениBOOKINGS_INIT_DAYS— сколько дней генерировать при первомmake bookings-initBOOKINGS_JOBS— число джобов генератора; в учебном стенде поддерживается только1
CSV pipeline (побочный пример)
CSV_DIR— путь к каталогу с CSV внутри контейнеров Airflow (по умолчанию/opt/airflow/data)CSV_ROWS— количество строк, генерируемых DAG (по умолчанию1000)