Шаг 5 плана main/solution split: - Удалены внутренние документы с main: plans/, archive/, PRD, assignment_design, pxf_bookings, bookings_tz, benchmarks, TODO.md - AGENTS.md: убраны упоминания plans/archive, agent-dag-testing - Починены 19 битых markdown-ссылок во всех оставшихся файлах - bookings_ods_design: airplanes/seats помечены как студенческие, обновлён DAG-граф (routes без зависимости от airplanes) - bookings_dds_design: обновлено описание DQ факта (student SK) - bookings_to_gp_dds: обновлена DQ-семантика для main - qa-plan: уточнено — ods.airplanes/seats пусты by design на main Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
136 lines
5.5 KiB
Markdown
136 lines
5.5 KiB
Markdown
# Технические детали стенда (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`
|
||
|
||
Примеры:
|
||
|
||
```bash
|
||
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 это нормально.
|
||
|
||
Если нужно завести вручную:
|
||
|
||
1) Airflow UI → Admin → Connections → Add a new record
|
||
2) Пример для Greenplum:
|
||
- Conn Id: `greenplum_conn`
|
||
- Conn Type: `Postgres`
|
||
- Host: `greenplum`
|
||
- Schema: `gp_dwh`
|
||
- Login/Password: `gpadmin` / `gpadmin`
|
||
- Port: `5432`
|
||
|
||
## 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 становится доступен (с ретраями).
|
||
|
||
Полезные команды:
|
||
|
||
```bash
|
||
make build # пересобрать образы
|
||
docker compose ps # проверить health
|
||
```
|
||
|
||
Перезапись seed‑файлов в `PXF_BASE`:
|
||
|
||
- `PXF_SEED_OVERWRITE=1` — перезаписать конфиги при старте;
|
||
- `PXF_SYNC_ON_START=1` — выполнить `pxf cluster sync` при старте.
|
||
|
||
Подробнее: см. ветку `solution` (`docs/reference/pxf_bookings.md`).
|
||
|
||
## Airflow: свой образ
|
||
|
||
Airflow тоже собирается из собственного `Dockerfile.airflow`, чтобы зависимости ставились при сборке,
|
||
а не во время старта контейнеров.
|
||
|
||
Если меняли `airflow/requirements.txt` или `Dockerfile.airflow`, пересоберите образы:
|
||
|
||
```bash
|
||
make build
|
||
make up
|
||
```
|
||
|
||
## Локальное окружение разработчика (uv)
|
||
|
||
Локальным окружением управляет `uv` — он создаёт `.venv` из `pyproject.toml` / `uv.lock`.
|
||
|
||
```bash
|
||
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_DB`
|
||
- `GP_PORT` — внутренний порт в Docker-сети (обычно `5432`)
|
||
- `GP_HOST_PORT` — внешний порт на хосте (по умолчанию `5435`)
|
||
|
||
### bookings-db (Postgres)
|
||
|
||
- `BOOKINGS_DB_USER`, `BOOKINGS_DB_PASSWORD`
|
||
- `BOOKINGS_DB_PORT` — внешний порт (по умолчанию `5434`)
|
||
- `BOOKINGS_START_DATE` — стартовая дата модельного времени
|
||
- `BOOKINGS_INIT_DAYS` — сколько дней генерировать при `make bookings-generate` (генерация с нуля)
|
||
- `BOOKINGS_JOBS` — число джобов генератора (по умолчанию `1`)
|