Files
de-roadmap/airflow-greenplum/README.md
T

9.9 KiB
Raw Blame History

DE Starter Kit — Greenplum + Kafka + Airflow

Добро пожаловать в учебный стенд для изучения основ Data Engineering! Этот проект поможет вам освоить ключевые инструменты современных data pipeline: Airflow для оркестрации, Kafka для потоковой передачи данных и Greenplum как аналитическую базу данных.

🎯 Что вы узнаете

  • Как настроить локальный стек данных с помощью Docker
  • Как Airflow управляет workflow и координирует задачи
  • Как данные перемещаются из Kafka в аналитическую базу
  • Как проверять качество данных в автоматизированных pipeline
  • Основы проектирования ETL/ELT процессов

🚀 Быстрый старт (для новичков)

Шаг 1: Подготовка окружения

Требования:

  • Docker Desktop (Windows/Mac) или Docker Engine 24+ (Linux)
  • Git для клонирования репозитория

💡 Совет: Если у вас Windows, рекомендуем использовать WSL (Windows Subsystem for Linux) для лучшей совместимости.

Шаг 2: Настройка проекта

# Скопируйте файл настроек
cp .env.example .env

# Запустите стек (это может занять 2-3 минуты при первом запуске)
docker compose up -d

# Инициализируйте Airflow
docker compose run --rm airflow-init

Шаг 3: Первый запуск pipeline

  1. Откройте Airflow UI: http://localhost:8080 (логин/пароль: admin/admin)
  2. Найдите DAG с названием kafka_to_greenplum
  3. Нажмите на переключатель слева от названия DAG, чтобы включить его
  4. Нажмите кнопку Trigger (значок воспроизведения ▶️)

🎉 Поздравляем! Вы только что запустили свой первый data pipeline:

  • Система сгенерировала 1000 тестовых заказов
  • Данные отправились в Kafka (систему потоковой передачи сообщений)
  • Airflow прочитал данные из Kafka и загрузил их в Greenplum

Шаг 4: Проверка результатов

Через веб-интерфейс:

Через командную строку:

# Подключитесь к Greenplum и проверьте данные
docker compose exec greenplum bash -c "su - gpadmin -c 'psql -p 5432 -d gpadmin'"

# Внутри psql выполните:
\dt                    # Показать таблицы
SELECT count(*) FROM public.orders;  # Посчитать записи

🛠️ Подробная настройка (для уверенных пользователей)

Установка 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

С make команды становятся короче:

make up && make airflow-init    # Запуск стека
make logs                       # Просмотр логов
make gp-psql                    # Подключение к Greenplum

Настройка подключения к Greenplum в Airflow

По умолчанию DAG использует переменные окружения, но вы можете создать Airflow Connection:

  1. Airflow UI → Admin → Connections → Add a new record
  2. Заполните поля:
    • Conn Id: greenplum_conn
    • Conn Type: Postgres
    • Host: greenplum
    • Schema: gpadmin
    • Login: gpadmin
    • Password: gpadmin
    • Port: 5432

📋 Что входит в стенд

Основные компоненты

  • Greenplum — аналитическая база данных для хранения и анализа данных
  • Kafka — система потоковой передачи данных (без Zookeeper)
  • Airflow — оркестратор workflow и задач
  • Postgres — база метаданных для Airflow

Готовые DAG (workflow)

  • kafka_to_greenplum — базовый pipeline: генерация → Kafka → Greenplum
  • greenplum_data_quality — проверки качества данных (наличие таблицы, схема, дубликаты)

Полезные команды

# Основные команды
make up                 # Запустить весь стенд
make down               # Остановить и удалить данные
make airflow-init       # Инициализировать Airflow
make ddl-gp             # Применить DDL к Greenplum
make gp-psql            # Подключиться к Greenplum через psql

# Проверка данных
make logs               # Следить за логами Airflow

⚙️ Настройка через переменные окружения

Все настройки находятся в файле .env. Основные параметры:

Greenplum

  • GP_USER — пользователь (по умолчанию: gpadmin)
  • GP_PASSWORD — пароль (по умолчанию: gpadmin)
  • GP_DB — база данных (по умолчанию: gpadmin)
  • GP_PORT — порт (по умолчанию: 5432)

Kafka

  • KAFKA_TOPIC — имя топика (по умолчанию: orders)
  • KAFKA_BATCH_SIZE — размер пакета при загрузке (по умолчанию: 500)

Airflow

  • GP_CONN_ID — ID подключения (по умолчанию: greenplum_conn)

🔍 Продвинутые темы

Архитектура pipeline

Поток данных в DAG kafka_to_greenplum:

  1. create_table — создает таблицу public.orders в Greenplum
  2. produce_messages — генерирует и отправляет сообщения в Kafka
  3. consume_and_load — читает из Kafka и загружает в Greenplum батчами

💡 Безопасность повторного запуска: Pipeline защищен от дубликатов, поэтому его можно запускать многократно.

Проверка качества данных

Запустите DAG greenplum_data_quality для автоматической проверки:

  • Наличие таблицы в базе
  • Соответствие схемы ожидаемой структуре
  • Объем загруженных данных
  • Отсутствие дубликатов записей

Ограничения учебного стенда

  • Greenplum запущен в single-node режиме (для обучения)
  • В продакшене Greenplum обычно разворачивают кластером на нескольких серверах
  • Используется Greenplum 6 (широко доступная версия), хотя Greenplum 7 предлагает больше возможностей

🆘 Типичные проблемы и решения

Проблема Решение
Airflow UI не открывается Дождитесь сообщения Listening at: http://0.0.0.0:8080 в логах (make logs)
Ошибка подключения к Greenplum Убедитесь, что контейнер greenplum стал статусом healthy (проверьте docker compose ps)
Нет топика orders в Kafka Создайте топик через Kafka UI или дождитесь авто-создания при первом запуске DAG
Команда make не найдена Используйте полные команды docker compose или установите make

📁 Структура проекта

├── docker-compose.yml     # Описание всех сервисов
├── .env.example           # Шаблон настроек
├── Makefile              # Удобные команды для работы
├── airflow/
│   └── dags/             # Файлы workflow (DAG)
│       ├── kafka_to_greenplum.py
│       └── data_quality_greenplum.py
└── sql/
    └── ddl_gp.sql        # Создание таблицы в Greenplum

💡 Советы для дальнейшего обучения

  1. Поэкспериментируйте с DAG — измените параметры генерации данных или размер батча
  2. Добавьте свои проверки — расширьте DAG data_quality_greenplum.py
  3. Попробуйте другие источники — замените генератор данных на чтение из файла или API
  4. Изучите Airflow deeper — добавьте зависимости между задачами, настройте расписания

Удачи в изучении Data Engineering! 🚀