diff --git a/airflow-docker/README.md b/airflow-docker/README.md index bed1c15..15baf31 100644 --- a/airflow-docker/README.md +++ b/airflow-docker/README.md @@ -83,7 +83,8 @@ airflow-docker/ │ ├── input/ # Входные данные │ └── output/ # Результаты обработки ├── logs/ # Логи Airflow -└── README.md # Эта инструкция +├── README.md # Эта инструкция +└── educational-tasks.md # Практические задания для студентов ``` ## 🎓 Учебные материалы @@ -121,6 +122,32 @@ airflow-docker/ - `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. **Изучите продвинутые темы** - ветвление и обработка ошибок + +Каждое задание содержит: +- Цель и сложность выполнения +- Конкретные требования к модификации кода +- Ожидаемый результат +- Время на выполнение + ## 🔧 Технические детали ### Переменные окружения @@ -195,6 +222,24 @@ docker-compose restart airflow-webserver - [Официальная документация 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! --- diff --git a/airflow-docker/educational-tasks.md b/airflow-docker/educational-tasks.md new file mode 100644 index 0000000..68d84c2 --- /dev/null +++ b/airflow-docker/educational-tasks.md @@ -0,0 +1,262 @@ +# Учебные задания по Apache Airflow + +Этот документ содержит практические задания для закрепления знаний по Apache Airflow. Каждое задание соответствует одному из учебных DAG'ов и направлено на лучшее понимание конкретных концепций. + +## 📋 Общие инструкции + +Перед выполнением заданий: +1. Убедитесь, что стенд Airflow запущен: `docker-compose up -d` +2. Проверьте доступность интерфейса: http://localhost:8080 +3. Ознакомьтесь с соответствующим DAG'ом в интерфейсе Airflow + +--- + +## 🚀 Задания для hello_world_dag.py + +**Цель:** Освоить базовые концепции Airflow - создание задач, зависимости, операторы. + +### Задание 1: Модификация существующих задач +**Сложность:** 🟢 Начальная +**Время выполнения:** 10-15 минут + +**Задача:** +- Откройте файл `hello_world_dag.py` +- Измените текст в функциях `print_hello()`, `print_date()`, `print_goodbye()` на русский язык +- Добавьте новую задачу, которая выводит текущую погоду (можно использовать фиктивные данные) + +**Цель задания:** Понять структуру DAG, научиться добавлять и модифицировать задачи. + +### Задание 2: Изменение расписания +**Сложность:** 🟢 Начальная +**Время выполнения:** 5-10 минут + +**Задача:** +- Измените `schedule_interval` с ежедневного на еженедельное выполнение +- Добавьте параметр `max_active_runs` для ограничения одновременных запусков +- Проверьте изменения в интерфейсе Airflow + +**Цель задания:** Освоить настройку расписания и параметров выполнения DAG. + +### Задание 3: Добавление BashOperator +**Сложность:** 🟡 Средняя +**Время выполнения:** 15-20 минут + +**Задача:** +- Добавьте задачу с `BashOperator`, которая создает текстовый файл в папке `/opt/airflow/data/output/` +- Настройте зависимости так, чтобы эта задача выполнялась между `date_task` и `end_task` +- Убедитесь, что файл создается при каждом запуске DAG + +**Цель задания:** Научиться работать с разными типами операторов. + +--- + +## 🗄️ Задания для sql_basic_dag.py + +**Цель:** Освоить работу с базами данных через Airflow. + +### Задание 1: Расширение структуры таблицы +**Сложность:** 🟡 Средняя +**Время выполнения:** 20-25 минут + +**Задача:** +- Добавьте в таблицу `students_sample` новые поля: `email`, `phone`, `registration_date` +- Модифицируйте SQL запросы для работы с новой структурой +- Добавьте задачу для обновления существующих записей + +**Цель задания:** Научиться работать с миграциями схемы базы данных. + +### Задание 2: Создание отчетов +**Сложность:** 🟡 Средняя +**Время выполнения:** 25-30 минут + +**Задача:** +- Добавьте задачу, которая создает сводный отчет по данным студентов +- Отчет должен содержать: количество студентов, средний возраст, распределение по возрасту +- Сохраните отчет в файл в папке `/opt/airflow/data/output/` + +**Цель задания:** Освоить создание аналитических отчетов в DAG'ах. + +### Задание 3: Работа с соединениями +**Сложность:** 🟡 Средняя +**Время выполнения:** 15-20 минут + +**Задача:** +- Создайте новое соединение к базе данных через Airflow UI +- Модифицируйте DAG для использования нового соединения +- Добавьте обработку ошибок подключения к БД + +**Цель задания:** Научиться управлять соединениями с внешними системами. + +--- + +## 📁 Задания для file_operations_dag.py + +**Цель:** Освоить работу с файлами и данными в Airflow. + +### Задание 1: Модификация генерации данных +**Сложность:** 🟡 Средняя +**Время выполнения:** 20-25 минут + +**Задача:** +- Добавьте новые поля в генерируемые данные: `department`, `experience_years`, `education_level` +- Модифицируйте валидацию для проверки новых полей +- Добавьте фильтрацию данных по определенным критериям (например, опыт > 3 года) + +**Цель задания:** Научиться работать с различными типами данных и валидацией. + +### Задание 2: Создание дополнительных отчетов +**Сложность:** 🟡 Средняя +**Время выполнения:** 25-30 минут + +**Задача:** +- Создайте отчет в формате JSON с детальной статистикой по отделам +- Добавьте визуализацию данных с помощью библиотеки matplotlib (сохранение графика в файл) +- Создайте сводку по зарплатам в разных возрастных категориях + +**Цель задания:** Освоить создание комплексных отчетов и визуализацию. + +### Задание 3: Оптимизация обработки +**Сложность:** 🟠 Продвинутая +**Время выполнения:** 30-35 минут + +**Задача:** +- Разделите обработку данных на параллельные задачи для разных отделов +- Добавьте контроль качества данных (проверка на дубликаты, аномалии) +- Реализуйте механизм повторной обработки при ошибках + +**Цель задания:** Научиться оптимизировать и делать обработку данных отказоустойчивой. + +--- + +## 🔄 Задания для data_processing_dag.py + +**Цель:** Освоить ETL процессы и работу с бизнес-логикой. + +### Задание 1: Расширение ETL пайплайна +**Сложность:** 🟡 Средняя +**Время выполнения:** 30-35 минут + +**Задача:** +- Добавьте новый источник данных - файл с информацией о продуктах +- Создайте задачу для объединения данных о заказах с информацией о продуктах +- Добавьте расчет общей выручки по продуктам + +**Цель задания:** Научиться работать с множественными источниками данных. + +### Задание 2: Создание дашборда +**Сложность:** 🟠 Продвинутая +**Время выполнения:** 35-40 минут + +**Задача:** +- Создайте HTML-отчет с ключевыми метриками бизнеса +- Добавьте графики продаж по дням и продуктам +- Реализуйте отправку отчета по email (симуляция) + +**Цель задания:** Освоить создание бизнес-отчетов и дашбордов. + +### Задание 3: Мониторинг качества данных +**Сложность:** 🟠 Продвинутая +**Время выполнения:** 25-30 минут + +**Задача:** +- Добавьте проверки качества данных на каждом этапе ETL +- Создайте механизм оповещения о проблемах с данными +- Реализуйте архивирование обработанных данных + +**Цель задания:** Научиться обеспечивать качество данных в ETL процессах. + +--- + +## 🌿 Задания для branching_dag.py + +**Цель:** Освоить условную логику и ветвление в Airflow. + +### Задание 1: Модификация условий ветвления +**Сложность:** 🟡 Средняя +**Время выполнения:** 20-25 минут + +**Задача:** +- Измените условие в функции `check_data_quality()` на основе реальных критериев (например, размер файла) +- Добавьте третью ветку обработки для данных "требующих ручной проверки" +- Настройте разные триггерные правила для слияния веток + +**Цель задания:** Научиться создавать сложные условия ветвления. + +### Задание 2: Реализация реального сценария +**Сложность:** 🟠 Продвинутая +**Время выполнения:** 30-35 минут + +**Задача:** +- Создайте реальные задачи обработки для CSV и JSON форматов +- Добавьте валидацию данных в каждой ветке +- Реализуйте механизм сравнения результатов из разных веток + +**Цель задания:** Применить ветвление в реальном сценарии обработки данных. + +### Задание 3: Динамическое ветвление +**Сложность:** 🟠 Продвинутая +**Время выполнения:** 25-30 минут + +**Задача:** +- Реализуйте ветвление на основе внешних параметров (например, переданных через Variables) +- Добавьте обработку случая, когда ни одна ветка не подходит +- Создайте механизм логирования выбранного пути выполнения + +**Цель задания:** Освоить динамическое принятие решений в DAG'ах. + +--- + +## ⚠️ Задания для error_handling_dag.py + +**Цель:** Освоить обработку ошибок и создание отказоустойчивых пайплайнов. + +### Задание 1: Настройка стратегий повторения +**Сложность:** 🟡 Средняя +**Время выполнения:** 20-25 минут + +**Задача:** +- Измените параметры `retries` и `retry_delay` для разных задач +- Добавьте экспоненциальную задержку между повторными попытками +- Реализуйте кастомный обработчик ошибок для конкретных исключений + +**Цель задания:** Научиться настраивать стратегии обработки ошибок. + +### Задание 2: Создание комплексной обработки ошибок +**Сложность:** 🟠 Продвинутая +**Время выполнения:** 30-35 минут + +**Задача:** +- Добавьте задачи для разных типов ошибок (сетевая ошибка, ошибка данных, системная ошибка) +- Создайте механизм эскалации ошибок (после N неудачных попыток) +- Реализуйте отправку уведомлений о критических ошибках + +**Цель задания:** Освоить создание комплексной системы обработки ошибок. + +### Задание 3: Мониторинг и логирование +**Сложность:** 🟠 Продвинутая +**Время выполнения:** 25-30 минут + +**Задача:** +- Добавьте детальное логирование всех этапов выполнения +- Создайте задачу для анализа логов и генерации отчетов об ошибках +- Реализуйте механизм автоматического восстановления после сбоев + +**Цель задания:** Научиться создавать системы мониторинга и отладки. + +--- + +## 🎯 Рекомендации по выполнению + +1. **Начинайте с простых заданий** и постепенно переходите к сложным +2. **Тестируйте каждое изменение** через интерфейс Airflow +3. **Изучайте логи выполнения** для понимания поведения задач +4. **Экспериментируйте** с разными настройками и параметрами +5. **Документируйте** свои решения и находки + +## 📊 Оценка прогресса + +- 🟢 **Начальный уровень:** Выполнены задания для hello_world_dag и sql_basic_dag +- 🟡 **Средний уровень:** Выполнены задания для file_operations_dag и data_processing_dag +- 🟠 **Продвинутый уровень:** Выполнены все задания, включая branching_dag и error_handling_dag + +Удачи в изучении Apache Airflow! 🚀 \ No newline at end of file