25 KiB
Программа учебного курса: Lakehouse без магии
Здесь собраны порядок модулей, ссылки на ноутбуки и результаты, по которым можно проверить свою работу. Рамки курса и learning outcomes описаны в course_prd.md.
Маршрут по модулям
Перед первым уроком подготовь стенд по START_HERE. Дальше проходи ноутбуки по порядку: файлы и таблицы из ранних модулей нужны в следующих. Пауза между занятиями описана в памятке учащегося.
| Модуль и ноутбук | Что понадобится | Результат перед переходом дальше |
|---|---|---|
| 1. Вход в стенд | Работающий стенд | Smoke test вернул 499999500000; ты можешь показать два worker-а и объяснить роли сервисов |
| 2. Модель Lakehouse | Модуль 1 | Ты нашел файлы демо-таблицы в MinIO и запись каталога в PostgreSQL; выполнил очистку демо по ноутбуку |
| 3. Исходные данные | Четыре файла Taxi на хосте | Файлы загружены в raw-зону MinIO, Spark читает их; проверены схема и основные метрики |
| 4. Bronze и Iceberg | Raw-файлы из Модуля 3 | Созданы bronze-таблица поездок и таблица зон из самостоятельного задания; видны их данные и metadata-файлы |
| 5. Silver | Обе bronze-таблицы | Создана silver-таблица, проверены правила очистки и качество результата |
| 6. Spark и Trino | Silver из Модуля 5; DBeaver по желанию | Одна таблица читается обоими движками; ты можешь объяснить, какие компоненты у них общие |
| 7. Изменения таблиц | Результаты предыдущих модулей | На демо-таблице проверены изменение схемы, чтение прошлого состояния и rollback; silver сохранена |
| 8. Обслуживание и финальная практика | Raw, bronze и silver | Проверено обслуживание таблиц; самостоятельно пройден поток от исходных файлов до чтения и проверок результата |
В каждом ноутбуке сначала прочитай объяснение, затем выполни демонстрацию и самостоятельное задание. Checkpoint в конце урока — вопросы и проверки для самопроверки. Сохраненный вывод помогает вернуться к результату, но не заменяет собственный запуск и объяснение.
1. Рамка курса
Формат: стартовая документация + 8 практических уроков в Jupyter Notebooks + вспомогательные справочные материалы.
Оценка длительности: ~12-15 часов вдумчивой работы.
Ориентир на модуль: в среднем ~1.5 часа, но финальная практика может занять дольше.
Сквозной учебный кейс: NYC TLC Yellow Taxi Trip Records + Taxi Zone Lookup.
Методика каждого урока: объяснение -> демонстрация -> самостоятельное повторение -> checkpoint.
Главная цель курса: дать студенту безопасную рабочую модель Lakehouse на локальном стенде Spark + Trino + Iceberg + MinIO + PostgreSQL, а не обзор всех возможных фич.
2. Принципы декомпозиции программы
- Сначала студент должен научиться поднимать и диагностировать стенд, и только потом строить пайплайн.
- Архитектурная модель
storage + catalog + computeпроходит через весь курс, а не выносится в одну "теоретическую" лекцию. - Весь курс строится вокруг одного датасета и одного потока
raw -> bronze -> silver. - В первой версии курса основной табличный формат только один:
Iceberg. - Практики про безопасность важнее "вау-фич": аккуратный
overwrite, понимание снапшотов, воспроизводимость шагов, базовое обслуживание таблиц. - Темы вне PRD v1 не включаются в основной трек и остаются в backlog.
3. Состав учебных материалов
Курс не должен состоять только из ноутбуков. Ноутбуки являются ядром практики, но вход в курс, запуск стенда и правила работы должны быть вынесены в обычную документацию, доступную до открытия IDE.
3.1. Стартовая документация до первого ноутбука
Этот слой нужен, потому что студент ещё не имеет доступа к ноутбукам, пока не поднят стенд.
Минимальный обязательный набор:
START_HERE.mdили аналогичный стартовый документ с маршрутом прохождения курса;- инструкция по prerequisites:
Docker,Docker Compose, свободные порты, базовые команды; - пошаговый гайд по запуску стенда:
build,up, проверка сервисов, открытие UI; - краткое объяснение, как запускать Jupyter-ноутбуки в браузерном VS Code, где лежат ноутбуки и как читать структуру урока;
- troubleshooting по типовым проблемам старта;
- памятка учащегося: продолжение занятия, сохранение данных, перезапуск ядра и диагностика;
- отдельная инструкция по сбросу учебных данных для повторного прохождения практик.
Что должен закрывать этот слой:
- студент понимает, что нужно установить и проверить до начала курса;
- студент может поднять стенд без ментора;
- студент знает, как попасть в браузерный VS Code,
MinIO,Trino UI; - студент понимает, как устроен формат уроков и что от него ожидается.
3.2. Практическое ядро курса
Это 8 ноутбуков, в которых живут демонстрации, самостоятельные задания и checkpoints.
3.3. Вспомогательные материалы
Кроме ноутбуков и стартового onboarding-слоя, курсу потребуются:
- вспомогательные скрипты в
src/sparkиsrc/trino; - инструкции по загрузке или подготовке учебных датасетов;
- краткий glossary по терминам
storage,catalog,compute,table format,namespace,metadata,manifest,snapshot,time travel,schema evolution,compaction,vacuum; - шпаргалка по типовым командам, адресам сервисов, ключевым путям и точкам входа (секция в
stack_reference.md); - опционально, заметки для ментора для ведения курса с ментором.
4. Трассировка Learning Outcomes на модули
| Learning Outcome | Основные модули | Где проверяется |
|---|---|---|
LO1. Понимание различий между storage, catalog, compute |
1, 2, 6 | checkpoints модулей 2 и 6 |
LO2. Умение поднять и диагностировать стенд |
1 | checkpoint модуля 1 |
LO3. Умение подключиться к Spark, загрузить raw-данные и проверить схему |
3 | checkpoint модуля 3 |
LO4. Умение создать и заполнить Iceberg-таблицу |
4 | checkpoint модуля 4 |
LO5. Умение собрать поток raw -> bronze -> silver |
4, 5, 8 | checkpoints модулей 5 и 8 |
LO6. Умение читать одну таблицу из Spark и Trino |
6, 8 | checkpoint модуля 6 и финальная практика |
LO7. Умение выполнять безопасные операции с таблицей |
7, 8 | checkpoints модулей 7 и 8 |
5. Верхнеуровневая структура практической части
Модуль 1. Вход в стенд и базовая диагностика
Рабочее название ноутбука: 01_environment_and_smoke_test.ipynb
Зачем нужен: студент должен уметь самостоятельно поднять локальный стенд и понять, куда смотреть, если что-то не работает.
Содержание:
- скачивание готовых образов, сборка окружения и запуск по
START_HERE.md; - проверка сервисов и веб-интерфейсов;
- базовый smoke test для Spark;
- первый обзор того, где в стенде
MinIO,PostgreSQL,Spark,Trinoи IDE.
Практика студента:
- запустить стенд;
- проверить статусы контейнеров и основные UI;
- выполнить простой smoke test и прочитать его результат.
Checkpoint: студент подтверждает, что стенд поднят, понимает назначение сервисов и умеет сделать первичную диагностику через docker compose ps, логи и UI.
Модуль 2. Ментальная модель Lakehouse: storage, catalog, compute
Рабочее название ноутбука: 02_lakehouse_mental_model.ipynb
Зачем нужен: убрать магическое восприятие Lakehouse и связать новую модель с привычным миром PostgreSQL/Greenplum.
Содержание:
- демонстрационный проход по цепочке
Spark -> catalog -> MinIOна маленькой demo-таблице; - что такое таблица в Lakehouse в практическом смысле;
- где лежат данные, где лежат метаданные, кто выполняет вычисления;
- разница между "одной базой данных" и набором согласованных компонентов;
- короткие параллели с классическим DWH.
Практика студента:
- выполнить готовую демонстрационную запись через
Sparkв небольшую demo-таблицу; - найти соответствующие артефакты в
MinIOи запись о таблице в каталоге через подготовленные диагностические шаги; - сопоставить наблюдения с ролями
storage / catalog / compute.
Checkpoint: студент своими словами объясняет роли MinIO, PostgreSQL, Spark и Trino, не путает физическое хранение с логической таблицей и может показать, где в стенде видны данные, метаданные и вычислитель.
Модуль 3. Raw-данные и первое чтение в Spark
Рабочее название ноутбука: 03_raw_ingest_and_first_read.ipynb
Зачем нужен: пройти путь от подключения к Spark до первого чтения и проверки исходных файлов Taxi.
Ориентир по времени: около 2 часов, из них 20–30 минут на подготовку Spark-сессии.
Содержание:
- подключение к Spark-кластеру: сессия, контекст, driver и executors; настройки из файла, параметров запуска и кода;
- повторное использование сессии, остановка и перезапуск ядра; изменение настроек во время работы;
- подготовленный data bundle и загрузка исходных файлов в raw-зону MinIO;
- чтение через Spark, проверка схемы и типов;
- базовые метрики, аномалии и причины сохранять raw без изменений.
Практика студента:
- заполнить шаблон сессии с подготовленным каталогом Iceberg; проверить подключение на собственной временной таблице и удалить ее;
- изменить и восстановить часовой пояс, сравнить повторный вызов builder-а с новым запуском приложения;
- проверить состав data bundle и загрузить несколько месяцев Taxi в MinIO;
- прочитать поездки и справочник зон, проверить схему и посчитать метрики;
- найти проблемные значения и объяснить, почему их сохраняют в raw.
Checkpoint: студент создает сессию для кластера, объясняет источники настроек и место выполнения заданий, умеет повторить подключение в новом ядре. Загружает учебный набор в raw-зону, читает его через Spark, проверяет схему и объясняет, зачем сохранять исходные данные.
Модуль 4. Первая рабочая Iceberg-таблица и слой bronze
Рабочее название ноутбука: 04_bronze_with_iceberg.ipynb
Зачем нужен: перейти от набора файлов к управляемой таблице и построить первый слой обработки.
Содержание:
- создание namespace и Iceberg-таблицы через Spark;
- запись raw-данных в
bronze; - осмотр структуры Iceberg на прикладном уровне: data files, metadata, snapshots;
- связь
raw -> bronzeс привычнымstg/ods-мышлением.
Практика студента:
- создать первую Iceberg-таблицу;
- загрузить в неё данные из raw;
- проверить результат через чтение таблицы и осмотр артефактов хранения.
Checkpoint: студент умеет создать и заполнить Iceberg-таблицу и понимает, что таблица в Lakehouse не сводится к одному каталогу с файлами.
Модуль 5. Слой silver и воспроизводимые трансформации
Рабочее название ноутбука: 05_silver_layer.ipynb
Зачем нужен: научить строить простой, понятный и воспроизводимый pipeline raw -> bronze -> silver.
Содержание:
- базовые трансформации и очистка данных;
- явная фиксация правил преобразования;
- разделение ответственности между слоями;
- проверки качества на уровне строк, схемы и агрегатов.
Практика студента:
- собрать
silverизbronze; - нормализовать часть полей;
- добавить простые проверки результата.
Checkpoint: студент может воспроизводимо построить silver и объяснить, чем bronze отличается от silver.
Модуль 6. Одна таблица, два движка: Spark и Trino
Рабочее название ноутбука: 06_spark_and_trino_on_same_table.ipynb
Зачем нужен: закрепить идею разделения вычислительных движков и показать, что данные не нужно копировать между системами.
Содержание:
- чтение одной и той же Iceberg-таблицы из Spark и Trino;
- роль общего каталога;
- простые SQL-проверки в Trino;
- ограничение темы: курс не уходит в глубокое сравнение движков.
Практика студента:
- записать таблицу через Spark;
- прочитать ту же таблицу через Trino;
- сверить результаты и ответить, почему это работает.
Checkpoint: студент понимает, почему Spark может писать, а Trino читать ту же таблицу без копирования данных.
Модуль 7. Безопасная работа с таблицами: schema evolution и time travel
Рабочее название ноутбука: 07_safe_table_changes.ipynb
Зачем нужен: научить не ломать таблицы вслепую и пользоваться базовыми защитными механизмами.
Содержание:
- добавление и изменение схемы на базовом уровне;
- влияние schema evolution на downstream-чтение;
- snapshots и time travel;
- разбор типовых ошибок новичка: неаккуратный
overwrite, слепая перезапись, неявные изменения типов.
Практика студента:
- добавить новую колонку или безопасно изменить схему;
- посмотреть историю snapshot-ов;
- прочитать предыдущее состояние таблицы после намеренно "неудачного" изменения.
Checkpoint: студент умеет делать базовые изменения схемы, смотреть историю таблицы и использовать time travel как страховку.
Модуль 8. Базовое обслуживание таблиц и финальная практика
Рабочее название ноутбука: 08_maintenance_and_final_lab.ipynb
Зачем нужен: завершить курс рабочим циклом поддержки таблицы и собрать все изученное в одну практику.
Содержание:
- проблема мелких файлов;
- базовый
compaction; - базовый
vacuum/ cleanup старых версий; - короткая параллель с обслуживанием
Greenplum AppendOnly-таблиц; - финальный мини-сценарий:
raw -> bronze -> silver -> проверка через Trino -> безопасное изменение -> обслуживание.
Практика студента:
- выполнить compaction на учебной таблице;
- очистить старые версии в контролируемом сценарии;
- пройти финальный end-to-end checkpoint.
Checkpoint: студент выполняет полный учебный сценарий и может объяснить, зачем нужны compaction и cleanup в прикладной работе.
6. Что получает студент по итогам курса
После прохождения программы студент:
- Поднимает локальный стенд и диагностирует типовые проблемы на старте.
- Понимает различие между
storage,catalogиcompute. - Подключается к Spark-кластеру, загружает raw-данные и проверяет их после чтения.
- Умеет создать и заполнить Iceberg-таблицу.
- Умеет построить простой поток
raw -> bronze -> silver. - Умеет читать одну и ту же таблицу из
SparkиTrino. - Умеет выполнять базовые безопасные операции: schema evolution, snapshots/time travel, compaction, vacuum.
7. Что не входит в первую версию курса
Следующие темы сознательно исключены из основного плана и могут стать отдельным расширением:
gold-слой и полноценные бизнес-витрины;- партиционирование и
partition pruningкак отдельная обязательная тема v1; - performance tuning и физический дизайн таблиц как самостоятельный модуль;
MERGE, row-level deletes, update-heavy сценарии;- streaming,
Kafka,CDC,Airflow,NiFi; - deep dive во внутренности
Icebergна уровне спецификации; - production security, governance, multi-user setup, Kubernetes и облака.
Существующие demo-артефакты по партиционированию в репозитории считаются legacy-материалами и не входят в обязательный трек первой версии курса.
8. Следующий уровень детализации
После утверждения этой структуры следующий документ должен описывать не "темы вообще", а каркас учебных артефактов:
- состав стартовой документации и порядок чтения до первого запуска, включая получение data bundle;
- список ноутбуков и их точные learning objectives;
- обязательные демонстрации, самостоятельные задания и checkpoints по каждому уроку;
- набор вспомогательных
src/sparkиsrc/trino-скриптов, включая загрузку датасета и диагностические шаги для модуля 2; - правила сброса стенда и повторного прохождения практик.