247 lines
9.4 KiB
Markdown
247 lines
9.4 KiB
Markdown
# Educational Airflow Setup for Beginners
|
||
|
||
Простой учебный стенд Apache Airflow для начинающих, изучающих SQL и Python.
|
||
|
||
## 🎯 Цель проекта
|
||
|
||
Создать максимально простую среду для изучения Apache Airflow.
|
||
Для удобства все переменные окружения захардкожены в docker скрипты. На проде так делать не надо :)
|
||
|
||
## 📋 Предварительные требования
|
||
|
||
- Docker и Docker Compose
|
||
- Базовые знания Python и SQL
|
||
- Веб-браузер для доступа к интерфейсу Airflow
|
||
|
||
## 🚀 Быстрый старт
|
||
|
||
### 1. Запуск стенда
|
||
|
||
```bash
|
||
# Перейдите в директорию проекта
|
||
cd airflow-docker
|
||
|
||
# Запустите все сервисы
|
||
docker-compose up -d
|
||
```
|
||
|
||
### 2. Доступ к интерфейсам
|
||
|
||
- **Airflow UI**: http://localhost:8080
|
||
- Логин: `admin`
|
||
- Пароль: `admin`
|
||
|
||
- **PostgreSQL для тренировок**: `localhost:5432`
|
||
- База данных: `training`
|
||
- Пользователь: `student`
|
||
- Пароль: `student`
|
||
|
||
- **PostgreSQL для метаданных Airflow**: `localhost:5433`
|
||
- База данных: `airflow`
|
||
- Пользователь: `airflow`
|
||
- Пароль: `airflow`
|
||
|
||
## 🏗️ Архитектура стенда
|
||
|
||
```mermaid
|
||
graph TB
|
||
A[Airflow Webserver] --> B[PostgreSQL Metadata]
|
||
C[Airflow Scheduler] --> B
|
||
D[Educational DAGs] --> E[PostgreSQL Training]
|
||
D --> F[Local Filesystem]
|
||
|
||
A -- порт 8080 --> G[Пользователь]
|
||
E -- порт 5432 --> H[SQL Клиент]
|
||
|
||
subgraph "Контейнеры Docker"
|
||
A
|
||
C
|
||
B
|
||
E
|
||
end
|
||
|
||
subgraph "Локальная файловая система"
|
||
F
|
||
D
|
||
end
|
||
```
|
||
|
||
## 📁 Структура проекта
|
||
|
||
```
|
||
airflow-docker/
|
||
├── docker-compose.yml # Конфигурация Docker
|
||
├── .env # Файл не используется: переменные заданы в docker-compose.yml
|
||
├── dags/ # DAG файлы для обучения
|
||
│ ├── hello_world_dag.py # Базовый пример
|
||
│ ├── sql_basic_dag.py # Работа с SQL
|
||
│ ├── file_operations_dag.py # Обработка файлов
|
||
│ ├── data_processing_dag.py # ETL пайплайн
|
||
│ ├── branching_dag.py # Условная логика
|
||
│ └── error_handling_dag.py # Обработка ошибок
|
||
├── data/ # Данные для упражнений
|
||
│ ├── input/ # Входные данные
|
||
│ └── output/ # Результаты обработки
|
||
├── logs/ # Логи Airflow
|
||
├── README.md # Эта инструкция
|
||
└── educational-tasks.md # Практические задания для студентов
|
||
```
|
||
|
||
## 🎓 Учебные материалы
|
||
|
||
### Основы Airflow
|
||
|
||
**Цели:**
|
||
- Понимание структуры DAG
|
||
- Создание простых задач
|
||
- Настройка зависимостей между задачами
|
||
|
||
**Примеры DAG:**
|
||
- `hello_world_dag.py` - базовые операторы Python
|
||
- `sql_basic_dag.py` - работа с базами данных
|
||
|
||
### Интеграция с данными
|
||
|
||
**Цели:**
|
||
- Подключение к PostgreSQL
|
||
- Выполнение SQL запросов
|
||
- Обработка файлов CSV
|
||
|
||
**Примеры DAG:**
|
||
- `file_operations_dag.py` - работа с файлами
|
||
- `data_processing_dag.py` - ETL процессы
|
||
|
||
### Продвинутые возможности
|
||
|
||
**Цели:**
|
||
- Условное выполнение задач
|
||
- Обработка ошибок
|
||
- Параметризация workflows
|
||
|
||
**Примеры DAG:**
|
||
- `branching_dag.py` - условная логика
|
||
- `error_handling_dag.py` - обработка ошибок
|
||
|
||
## 🎯 Практические задания
|
||
|
||
Для закрепления знаний по каждому DAG мы подготовили практические задания разного уровня сложности:
|
||
|
||
### 📋 Учебные задания
|
||
|
||
В файле **[educational-tasks.md](educational-tasks.md)** вы найдете детальные задания для каждого DAG:
|
||
|
||
- 🌱 **Начальный уровень**: Базовые задачи по созданию и настройке DAG'ов
|
||
- 📚 **Средний уровень**: Работа с данными, файлами и SQL операциями
|
||
- 🚀 **Продвинутый уровень**: ETL процессы, ветвление, обработка ошибок
|
||
|
||
### 🎓 Рекомендуемый путь обучения
|
||
|
||
1. **Начните с `hello_world_dag.py`** - освоите основы Airflow
|
||
2. **Перейдите к `sql_basic_dag.py`** - изучите работу с базами данных
|
||
3. **Попрактикуйтесь на `file_operations_dag.py`** - работа с файлами
|
||
4. **Освойте ETL на `data_processing_dag.py`** - обработка данных
|
||
5. **Изучите продвинутые темы** - ветвление и обработка ошибок
|
||
|
||
Каждое задание содержит:
|
||
- Цель и сложность выполнения
|
||
- Конкретные требования к модификации кода
|
||
- Ожидаемый результат
|
||
- Время на выполнение
|
||
|
||
## 🔧 Технические детали
|
||
|
||
### Переменные окружения
|
||
|
||
В этом проекте мы не используем `.env`: все значения заданы напрямую в `docker-compose.yml`.
|
||
|
||
Сервисы Airflow получают:
|
||
- `POSTGRES_TRAINING_HOST=postgres-training`
|
||
- `POSTGRES_TRAINING_PORT=5432`
|
||
- `POSTGRES_TRAINING_DB=training`
|
||
- `POSTGRES_TRAINING_USER=student`
|
||
- `POSTGRES_TRAINING_PASSWORD=student`
|
||
- `AIRFLOW_CONN_POSTGRES_TRAINING=postgresql://student:student@postgres-training:5432/training`
|
||
|
||
`docker-compose run --rm airflow-init` запускает `airflow connections add postgres_training`, поэтому соединение доступно сразу после инициализации. Проверить наличие можно через:
|
||
|
||
```bash
|
||
docker-compose exec airflow-webserver airflow connections get postgres_training
|
||
```
|
||
|
||
|
||
### Порты
|
||
|
||
- `8080` - Airflow Webserver
|
||
- `5432` - PostgreSQL для тренировок
|
||
- `5433` - PostgreSQL для метаданных Airflow
|
||
|
||
## 🛠️ Управление стендом
|
||
|
||
### Запуск сервисов
|
||
```bash
|
||
docker-compose up -d
|
||
```
|
||
|
||
### Остановка сервисов
|
||
```bash
|
||
docker-compose down
|
||
```
|
||
|
||
### Просмотр логов
|
||
```bash
|
||
# Логи Airflow
|
||
docker-compose logs airflow-webserver
|
||
docker-compose logs airflow-scheduler
|
||
|
||
# Логи PostgreSQL
|
||
docker-compose logs postgres-training
|
||
docker-compose logs postgres-metadata
|
||
```
|
||
|
||
### Перезапуск конкретного сервиса
|
||
```bash
|
||
docker-compose restart airflow-webserver
|
||
```
|
||
|
||
## 🐛 Решение проблем
|
||
|
||
### DAG не появляется в интерфейсе
|
||
- Проверьте, что файл находится в папке `dags/`
|
||
- Убедитесь в правильности синтаксиса Python
|
||
- Проверьте логи планировщика: `docker-compose logs airflow-scheduler`
|
||
|
||
### Ошибки подключения к базе данных
|
||
- Убедитесь, что PostgreSQL запущен: `docker-compose ps`
|
||
- Проверьте логи PostgreSQL: `docker-compose logs postgres-training`
|
||
|
||
### Задачи завершаются с ошибкой
|
||
- Проверьте логи задачи в интерфейсе Airflow
|
||
- Убедитесь в наличии необходимых Python пакетов
|
||
|
||
## 📚 Дополнительные ресурсы
|
||
|
||
- [Официальная документация Airflow](https://airflow.apache.org/docs/)
|
||
- [Учебные материалы в родительской папке](../)
|
||
- [Практические задания для студентов](educational-tasks.md)
|
||
|
||
---
|
||
|
||
## 🌟 Начало работы с заданиями
|
||
|
||
После запуска стенда Airflow, откройте файл [educational-tasks.md](educational-tasks.md) и выберите задание, соответствующее вашему уровню подготовки. Каждое задание содержит подробные инструкции и ожидаемые результаты.
|
||
|
||
**Быстрый старт с заданиями:**
|
||
```bash
|
||
# Запустите стенд
|
||
docker-compose up -d
|
||
|
||
# Откройте задания в браузере или редакторе
|
||
# И следуйте инструкциям из educational-tasks.md
|
||
```
|
||
|
||
Удачи в изучении Apache Airflow!
|
||
|
||
---
|
||
|
||
**Примечание**: Этот стенд предназначен исключительно для учебных целей. Для production использования требуется дополнительная настройка безопасности.
|