Карта курса: 17 модулей
Курс — 17 модулей, ~78 часов чтения и практики. Он построен слоями: от базовой модели выполнения Spark (что такое RDD, stage, task) через внутреннее устройство shuffle, памяти и Catalyst/Tungsten к streaming-internals, расширению движка, альтернативным execution engines и production-отладке. Капстоун в конце — реальный debugging-проект на production-трейсах.
Курс не требует строго линейного прохождения: многие модули (07, 10, 11, 12, 13) достаточно самостоятельны. Но фундамент (модули 01-06) лучше идти последовательно — каждый следующий опирается на предыдущий.
Карта middle-курса Apache Spark Deep-DiveДорожная карта всех 17 модулей
Раскладка по фазам
Phase 0 — Введение (модули 00-01)
Два вводных модуля: этот урок и урок прогресса — плюс модуль 01 (Философия internals). Если вы знаете Spark хорошо и хотите быстрее к технике — можно прочитать только вводные уроки и прыгнуть в модуль 02. Но модуль 01 рекомендуется не пропускать: он устанавливает mental model “internals-мышления” — как именно смотреть на production-инцидент, когда у вас есть знание механики, а не только API-документация. Это короткий модуль (~5 уроков), но он влияет на то, как вы будете усваивать остальное.
Phase 1 — Фундамент выполнения (модули 02-05)
Это обязательная последовательность для всех. Четыре модуля строятся один на другом:
- RDD и модель выполнения (02) — это фундамент фундамента. RDD lineage, DAG of stages, narrow vs wide transformations, понятие shuffle boundary. Без этого не работает ни одна дальнейшая дискуссия про production-тюнинг.
- Архитектура и scheduler (03) — как job попадает в DAGScheduler, как он разбивается на stages, как stages распределяются по executor-ам через TaskScheduler. Спекулятивное исполнение и его цена.
- Shuffle internals (04) — самый болезненный модуль с точки зрения production. Shuffle — это почти всегда корень performance-проблем, и чтобы диагностировать их, нужно знать sort-based shuffle до уровня файлов и буферов.
- Память и storage (05) — unified memory model, как Spark делит heap между execution и storage, почему OOM в Spark не всегда выглядит как “insufficient heap”, как работает BlockManager и что такое off-heap allocation.
Эти четыре модуля дают базовый производственный диагностический инструментарий: вы можете объяснить большинство performance-проблем в Spark по Spark UI метрикам.
Phase 2 — Optimizer и codegen (модули 06-08)
- Catalyst и Tungsten (06) — это “мозг” Spark. Как Catalyst трансформирует ваш code или SQL в executable plan через analysis, logical optimization, physical planning. Volcano planner и cost-based optimizer. Tungsten: почему Spark не работает с обычными Java-объектами в hot path, что такое whole-stage codegen и как Spark генерирует JVM bytecode на лету.
- Сериализация и row format (07) — UnsafeRow: бинарный формат строк в памяти, как он устроен, как это связано с off-heap. Encoders и их роль при Dataset vs DataFrame.
- AQE (08) — Adaptive Query Execution: три адаптивных оптимизации (coalesce partitions, convert sort-merge to broadcast, skew join). Как Spark собирает runtime-статистику, как QueryStage-барьеры останавливают выполнение для перепланирования. Почему AQE иногда делает хуже.
Phase 3 — Streaming (модули 09-10)
- Structured Streaming internals (09) — это отдельная подсистема со своей execution model.
IncrementalExecutionкак отдельный планировщик. Micro-batch trigger loop.StateStore: HDFS-backend (default) и RocksDB-backend.transformWithState— новый stateful API в Spark 4.0 и как он реализован иначе, чемflatMapGroupsWithState. Watermark mechanics на уровне кода (не только концепция). - Apache Arrow и Spark Connect (10) — Arrow columnar format в Spark: как он ускоряет pandas UDFs, что происходит при конвертации Row format в Arrow batch. Spark Connect: клиент-серверная модель, что значит “thin client”, как plan строится на клиентской стороне и где выполняется. Это меняет debugging-workflow.
Phase 4 — Расширение и экосистема (модули 11-13)
Три модуля, которые можно читать в любом порядке:
- Расширение Spark (11) — DataSource V2 API: как написать кастомный источник данных, который поддерживает predicate pushdown и partition pruning. Кастомные правила Catalyst: как встроиться в optimizer pipeline.
SparkSessionExtensions— официальный extension point. - External Shuffle Service (12) — почему ESS нужен при больших кластерах, как
ExternalShuffleServiceработает отдельным процессом от executor-а, как это решает проблему потери shuffle-файлов при рестарте executor-а. Deployment на YARN и Kubernetes. - Alternative Execution Engines (13) — Comet и Gluten: два проекта, которые заменяют JVM-execution на native code (Arrow/DataFusion и Velox соответственно). Как они встраиваются через Spark plugin API, какие операторы покрывают, какие trade-offs. Это не академия — оба работают в production у крупных компаний в 2026.
Phase 5 — Отладка и капстоун (модули 14-15)
- Исходники и отладка (14) — практический тур по Spark monorepo: какие модули важны, как ориентироваться в ~700K строк кода. Async-profiler и flame graphs для Spark executor-ов. Java Flight Recorder. Чтение Spark UI на уровне internals: что стоит за каждой метрикой.
- Капстоун (15) — production debugging capstone: набор реальных Spark UI трейсов с неочевидными проблемами. Ваша задача — диагностировать, объяснить cause и предложить fix. Применяет знания всего курса.
Приложение (модуль 16)
Справочник: параметры конфигурации Spark с internals-объяснениями (не просто “что делает”, а “почему именно так”), классы Spark по подсистемам (список для быстрого поиска при отладке), глоссарий internals-терминологии.
Killer-модули
В курсе есть четыре модуля, которые дают непропорционально большую часть долгосрочной ценности:
Эти четыре модуля — около 35% курса по объёму, но закрывают около 65% типичных production-вопросов.
Рекомендуемые learning paths
В зависимости от ваших задач — разные приоритеты.
Path 1: Production debugging (быстрый старт)
Если нужно срочно научиться диагностировать production-инциденты — минимальный фундамент:
- 00 -> 01 (установить mental model — 2 часа)
- 02 -> 03 (RDD, DAG, scheduler — обязательный контекст)
- 04 (shuffle — самая частая причина проблем)
- 05 (memory — вторая по частоте)
- 06 (Catalyst — для понимания plan)
- 08 (AQE — работает по умолчанию, влияет на каждый job)
- 14 (debugging tools)
Это около 28 часов. После этого вы можете диагностировать большинство production-инцидентов.
Path 2: Platform engineer / performance тюнинг
Если вы занимаетесь тюнингом кластера или пишете Spark-платформу:
- 02 -> 06 (полный фундамент)
- 07 (serialization — важно для Dataset vs DataFrame decision)
- 08 (AQE — глубоко)
- 11 (extending Spark — DataSource V2)
- 12 (ESS — критично для больших кластеров)
- 13 (Comet/Gluten — если рассматриваете native engines)
Path 3: Streaming-инженер
Если вы пишете Structured Streaming в production:
- 02 -> 05 (фундамент — без него streaming-internals не понять)
- 06 (Catalyst — IncrementalExecution строится на нём)
- 09 (Structured Streaming internals — главный модуль для вас)
- 10 (Spark Connect — меняет deployment streaming-приложений)
- 08 (AQE — тоже применяется в Structured Streaming)
Path 4: Полный курс
Если есть ~3 месяца и 5-6 часов в неделю — идите линейно. Это даст полное понимание всего стека, и вы будете знать Spark глубже, чем большинство людей, которых называют “Spark experts”.
Формат уроков
Каждый урок единого формата:
- Теория с диаграммами — концептуальный слой и механика. 20-35 минут чтения.
- Code references — каждый урок называет конкретные классы Spark с указанием метода. Рекомендуется открывать в IDE параллельно.
- Квиз после урока — 3-5 вопросов, преимущественно аналитических. Senior-курс: большинство вопросов требуют рассуждения, не просто recall.
- Module exam — 6 deep-вопросов в конце каждого модуля, passing threshold 70%. Подробнее — в следующем уроке.
- Labs на ключевых модулях — Docker Compose кластер, воспроизводимые failure-сценарии.
Что курс НЕ покрывает
- DataFrame API и SQL — это middle-курс. Здесь только internals.
- Deployment и DevOps — Kubernetes, YARN configs на уровне ops — это отдельная тема. Курс касается deployment только там, где оно непосредственно связано с internals (например, ESS на Kubernetes).
- MLlib и GraphX — не покрываем. Это отдельные подсистемы со своими internals.
- PySpark на уровне API — используется как язык примеров, но не как предмет изучения. Если нужен PySpark глубоко —
pandas_udfinternals есть в модуле 10 (Arrow). - История версий до 3.x — упоминаем как контекст, но базовая версия везде 4.0.
Следующий шаг
Следующий урок — прогресс, квизы и экзамены: как устроены контрольные точки курса, как эффективно проходить модульные экзамены.
После intro-блока начинается модуль 01 — Философия internals. Рекомендую не пропускать: он задаёт правильную установку для всего курса.