Files
airflow-manual/airflow-docker/README.md
T

106 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Учебный стенд Apache Airflow
Стенд содержит Airflow 2.9.2, учебную PostgreSQL и девять DAG. Он нужен для знакомства с инструментом: запустить пример, изменить его и посмотреть результат. Для работы понадобятся Docker с Compose, браузер и знания Python, pandas и SQL.
## Запуск
Из корня репозитория:
```bash
cd airflow-docker
docker compose up -d --build
```
Команды подходят для Linux и PowerShell в Windows. При первом запуске Docker собирает образ, поднимает две БД, выполняет `airflow-init`, затем запускает webserver и scheduler. Инициализация создает учетную запись и подключение `postgres_training`.
Проверьте состояние:
```bash
docker compose ps -a
docker compose logs airflow-init
```
Завершение `airflow-init` с кодом 0 нормально: это разовая подготовка. Остальные четыре сервиса должны работать. Откройте http://localhost:8080 и войдите как `admin` / `admin`.
| Сервис | Адрес с компьютера | База | Пользователь / пароль |
|---|---|---|---|
| Airflow UI | `http://localhost:8080` | - | `admin` / `admin` |
| Учебная PostgreSQL | `localhost:5432` | `training` | `student` / `student` |
| Метаданные Airflow | `localhost:5434` | `airflow` | `airflow` / `airflow` |
В задачах используется адрес `postgres-training:5432`: это имя сервиса внутри Docker. Базу метаданных для упражнений не используйте. Учебные пароли заданы в Compose; для публичного сервера такая конфигурация не подходит.
## Прохождение практики
Откройте [задания](../educational-tasks.md). Их восемь блоков проходят последовательно; перед каждым указаны нужные главы [учебника](../README.md), исходные файлы и настройки.
Основные задания внутри блока сохраняют изменения предыдущих шагов. Дополнительные находятся в конце блока и помечены "По желанию"; их можно пропустить. Для завершения практики достаточно основных заданий и проверки их результатов.
| Блок | DAG |
|---|---|
| [Первый DAG](../educational-tasks.md#first-dag) | `hello_world_dag` |
| [SQL и подключения](../educational-tasks.md#sql) | `sql_basic_dag` |
| [Работа с файлами](../educational-tasks.md#files) | `file_operations_dag` |
| [Загрузка CSV и DQ](../educational-tasks.md#load-dq) | `csv_to_postgres`, `csv_to_postgres_dq` |
| [Разбор ETL](../educational-tasks.md#etl) | `data_processing_dag` |
| [Ветвление](../educational-tasks.md#branching) | `branching_dag` |
| [Ошибки и повторы](../educational-tasks.md#errors) | `error_handling_dag` |
| [Пулы, XCom и TaskGroup](../educational-tasks.md#resources) | `resource_management_dag` |
Описание поведения исходных примеров находится в [справочнике DAG](dag-specifications.md). Почта нужна только для отдельного задания по желанию; SMTP в стенде не настроен.
## Файлы и данные
```text
airflow-docker/
├── docker-compose.yml # Сервисы, порты и учебные подключения
├── Dockerfile # Airflow 2.9.2
├── requirements.txt # Дополнительные Python-пакеты
├── dags/ # Девять учебных DAG
├── data/input/ # Входные CSV и данные упражнений
├── data/output/ # Результаты задач
└── init-postgres.sql # Начальная подготовка учебной БД
```
`dags/` и `data/` смонтированы в контейнеры как `/opt/airflow/dags/` и `/opt/airflow/data/`. Правки DAG подхватываются планировщиком; перед новым запуском дождитесь обновления вкладки Code. Резервные копии Python-файлов храните вне `dags/`, чтобы не создать два определения одного `dag_id`.
Таблицы PostgreSQL сохраняются в именованных томах `pg_data` и `pgmeta`. Обычная остановка их не удаляет. Логи Airflow хранятся внутри контейнеров; важные логи опыта сохраните до удаления контейнеров.
Для SQL-запросов из заданий:
```bash
docker compose exec postgres-training psql -U student -d training
```
Выход из psql - `\q`. Готовое подключение Airflow можно проверить командой:
```bash
docker compose exec airflow-webserver airflow connections get postgres_training
```
## Управление и поиск ошибок
Все команды ниже выполняются из `airflow-docker`.
```bash
docker compose exec airflow-webserver airflow version
docker compose exec airflow-webserver airflow dags list
docker compose exec airflow-webserver airflow dags list-import-errors
docker compose logs airflow-scheduler
docker compose logs airflow-webserver
```
Если DAG не появился, проверьте путь файла и ошибки импорта. Если задача упала, сначала откройте ее лог в UI. При ошибке подключения проверьте `docker compose ps` и Conn Id задачи. Задачи из блока 8 ждут, пока вы создадите указанный в задании пул.
Остановка с сохранением данных:
```bash
docker compose down
```
Повторный запуск - `docker compose up -d`. Для полного сброса обеих БД используйте `docker compose down -v`: эта команда удалит учебные таблицы, историю запусков и настройки Airflow в томах. Файлы в `data/` останутся.
## Для авторов курса
[План обновления практики](../docs/specs/2026-09-28-practice-improvement-plan.md) сохраняет согласованные решения, разбор исходных заданий и результаты проверок.