Как устроен курс: от железа к практике, лабы и capstone
Trino можно изучать двумя способами. Первый — поверхностный: выучить синтаксис, запомнить пару флагов конфигурации, научиться запускать запросы. Так вы будете пользоваться Trino, но не понимать его. Когда запрос внезапно начнёт висеть или падать с OutOfMemory, вы окажетесь в тупике, потому что у вас нет модели того, что происходит внутри.
Второй способ — тот, по которому построен этот курс. Мы идём «до железа»: разбираем не только как что-то делать, но и почему оно работает именно так. Как текст SQL превращается в дерево задач на узлах кластера. Как данные физически летают между машинами. Как оптимизатор решает, в каком порядке джойнить таблицы. Как устроена память воркера и почему она заканчивается. Когда у вас в голове есть точная модель механики, любая проблема перестаёт быть магией — она становится следствием конкретного устройства, которое вы понимаете.
Этот урок объясняет, как устроен сам курс: из чего он состоит, в каком порядке идёт материал, что такое лабораторные работы и что вас ждёт в финале.
Принцип «от железа к практике»
Курс намеренно идёт снизу вверх — от фундамента к применению. Сначала вы строите ментальную модель того, как Trino устроен внутри, и только потом учитесь применять её к реальным задачам: lakehouse, федерация, тюнинг, эксплуатация. Так знание ложится слоями, и каждый следующий слой опирается на предыдущий.
Курс состоит из 17 модулей, и логически они делятся на четыре крупных блока.
Фундамент (модули 01-03). Здесь вы разбираетесь, что такое Trino и его место среди других инструментов, как устроена MPP-архитектура кластера — координатор и воркеры — и как работает модель коннекторов и каталогов, через которую Trino подключается к источникам данных.
Механика исполнения (модули 04-06). Это сердцевина курса «до железа». Полный жизненный цикл запроса: от текста SQL через парсинг, анализ, логическое и распределённое планирование. Затем распределённое исполнение до самого низкого уровня — stage, task, split, driver, operator, exchange, колоночные Page и Block в памяти. И планировщик: как сплиты генерируются и назначаются на задачи.
Язык и оптимизатор (модули 07-08). Система типов Trino, сложные типы, оконные функции, лямбды, SQL UDF. И отдельно — cost-based optimizer изнутри: статистика таблиц, переупорядочивание джойнов, выбор стратегии распределения, pushdown и dynamic filtering.
Применение и эксплуатация (модули 09-15). Lakehouse и коннектор Iceberg, Hive и Delta Lake, федеративные запросы, управление памятью и ресурсами, fault-tolerant execution, безопасность и деплой в Kubernetes, наблюдаемость и тюнинг производительности.
Завершает всё capstone (модуль 16) — сквозной практический проект, где вы собираете изученное в одну работающую платформу.
Зачем сначала теория, а потом практика
Возникает резонный вопрос: почему бы не начать с практики сразу? Поднял Trino, запустил запросы, а теорию подтягивать по ходу. Так делают многие быстрые курсы, и для совсем поверхностного знакомства это работает.
Но цель этого курса другая. Возьмём конкретный пример. Запрос-джойн двух больших таблиц падает с ошибкой о превышении памяти. Без модели в голове вы можете только гуглить сообщение об ошибке и наугад крутить флаги. С моделью вы рассуждаете так: джойн собирает на build-side хэш-таблицу; стратегия распределения, видимо, BROADCAST, значит, эта хэш-таблица копируется целиком в память каждого воркера; build-side слишком большой, чтобы влезть; нужно либо переключить распределение на PARTITIONED, чтобы данные пошли через шаффл и распределились по кластеру, либо собрать статистику, чтобы оптимизатор сам выбрал правильную стратегию. Это не угадывание — это вывод из понимания механики.
Именно поэтому модули 04-08 (механика и оптимизатор) идут до модулей применения. Когда в модуле про память вы встретите query.max-memory-per-node, вы уже будете знать, что такое воркер, task и operator, и настройка ляжет на готовую модель, а не повиснет в воздухе.
Не пропускайте модули 04-06, даже если хочется быстрее добраться до Iceberg и федерации. Это позвоночник курса. Всё, что идёт после, постоянно ссылается на понятия stage, task, split, exchange и фрагмент плана. Без них практические модули превратятся в набор рецептов без понимания.
Структура каждого урока
Все уроки построены одинаково, чтобы вам было удобно. Каждый урок — это:
- Основной текст с объяснением «до железа»: механика, а не только рецепты.
- Диаграммы — потоки данных, архитектурные слои, сравнения. Они помогают увидеть структуру, а не только прочитать о ней.
- Реальные примеры — настоящие фрагменты конфигурации, настоящий SQL, реальный вывод
EXPLAINи команд. Никаких выдуманных «примерно так». - Блок «Попробуй сам» — практическое задание ближе к концу урока. Без автоматической проверки: это инструкция, что сделать руками, чтобы пощупать тему.
- Knowledge Check в самом конце — один вопрос на понимание ключевой идеи урока с развёрнутым ответом.
Кроме того, к каждому уроку есть квиз из четырёх вопросов, а к каждому модулю — экзамен из шести вопросов, объединяющий темы всего модуля. Квизы проверяют понимание урока, экзамен — способность связать темы модуля вместе.
Как проходить курс эффективно
Несколько практических советов, как извлечь из курса максимум.
Не пропускайте блоки «Попробуй сам». Чтение даёт знание, но навык рождается только на практике. Каждый такой блок — это маленький эксперимент руками, и именно он переводит абстрактное «я понял» в конкретное «я сделал и увидел». На разбор уходит немного времени, а отдача велика: вы своими глазами видите то, о чём прочитали.
Используйте Knowledge Check честно. Дойдя до вопроса в конце урока, сначала сформулируйте ответ сами — вслух или письменно — и только потом сверьтесь с разбором. Если ответ совпал в общих чертах, тему можно считать усвоенной. Если нет — это сигнал перечитать соответствующий раздел, пока пробел свежий и маленький.
Не зубрите квизы — понимайте. Квизы и экзамены проверяют не память, а понимание. В каждом разборе ответа объясняется не только почему верный вариант верен, но и почему остальные неверны — читайте разбор целиком, даже когда ответили правильно. Часто именно объяснение неверных вариантов закрывает скрытое заблуждение.
Двигайтесь по порядку. Курс выстроен слоями, и каждый модуль опирается на предыдущие. Соблазн перепрыгнуть к интересной теме понятен, но обычно приводит к тому, что приходится возвращаться. Линейный проход экономит время, а не тратит его.
Лабораторные работы
Помимо блоков «Попробуй сам», курс включает несколько крупных лабораторных работ — развёрнутых практических заданий, которые занимают больше одного урока и собирают несколько тем вместе. Лабы — это место, где знание становится навыком.
Четыре опорные лабы курса:
| Лаба | Что делаете | Какие темы собирает |
|---|---|---|
| Lakehouse с нуля | Поднимаете Trino + Iceberg + MinIO в docker-compose, создаёте таблицы, делаете time travel и обслуживание | Iceberg, объектное хранилище, метаданные таблиц |
| Федеративный join | Джойните PostgreSQL и Parquet-на-S3 одним запросом, смотрите pushdown через EXPLAIN | Федерация, коннекторы, pushdown |
| Чтение EXPLAIN ANALYZE | Берёте намеренно неоптимальный запрос, находите bottleneck, чините через статистику | CBO, распределённый план, dynamic filtering |
| Resource groups и память | Настраиваете изоляцию нагрузки, провоцируете spill и работу low-memory killer | Память, ресурсы, отказоустойчивость |
Лабы построены вокруг docker-compose, чтобы вы могли поднять полноценную среду на своей машине без облака и без затрат. Среду разработки для всех практик мы настроим в следующем уроке.
Capstone: сквозной проект
Финальный модуль 16 — это capstone. В отличие от обычных модулей, он не вводит новую теорию, а собирает всё изученное в один сквозной проект: вы строите аналитическую платформу на Trino, Iceberg и объектном хранилище от начала до конца.
В capstone вы разворачиваете кластер с координатором и воркерами, подключаете каталоги и MinIO, загружаете и моделируете данные в Iceberg, настраиваете обслуживание таблиц, добавляете федеративный слой с подключением PostgreSQL, строите витрины, тюните запросы по EXPLAIN ANALYZE, настраиваете статистику, dynamic filtering и resource groups, а в конце проходите по безопасности, мониторингу и fault-tolerant режиму.
Capstone — это проверка не памяти, а инженерного мышления: умеете ли вы соединить отдельные знания в работающую систему и принять обоснованные решения там, где готового рецепта нет.
Capstone имеет смысл проходить только после всех остальных модулей. Он намеренно опирается на каждый из них. Если по ходу курса какая-то тема показалась размытой, capstone подсветит это — и будет хорошим поводом вернуться и перечитать соответствующий модуль.
Попробуй сам
Откройте список модулей курса целиком и для каждого из 17 модулей запишите одним предложением, что вы ожидаете там узнать, исходя из его названия. Отдельно отметьте 2-3 модуля, тема которых вам сейчас наименее понятна.
Затем мысленно проложите маршрут: какой модуль зависит от какого. Например, модуль про cost-based optimizer (08) явно опирается на модуль про жизненный цикл запроса (04). Постройте такую цепочку зависимостей хотя бы для пяти модулей. Это упражнение даст вам карту курса и покажет, почему порядок модулей именно такой, а не другой.