Learning Platform
Глоссарий Troubleshooting
Урок 01.02 · 18 мин
Начальный
Карта курсаRoadmapLearning pathsМодули

Карта курса: 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 модулей

Apache Spark Internals — карта курса
00 — ВведениеТекущий модуль. Для кого курс, как учиться, карта модулей.
01 — Философия internalsЗачем знать internals. Как думает senior-инженер при production-инциденте. От API до машины.
Фундамент выполнения
02 — RDD и модель выполненияRDD lineage, DAG, stages, tasks, narrow vs wide transformations, shuffle boundary, SparkContext internals.
03 — Архитектура и schedulerDriver, executor, cluster manager. DAGScheduler vs TaskScheduler. Stage graph построение. SchedulerBackend. Спекулятивное выполнение.
04 — Shuffle internalsSort-based shuffle, SortShuffleManager, ShuffleMapTask, shuffle write/read path, external merge sort, bypassMerge, Tungsten sort. Shuffle spill mechanics.
05 — Память и storageUnified memory model, execution vs storage memory, off-heap, MemoryManager, spillToMemory, BlockManager, storage levels, broadcast internals.
Optimizer и codegen
06 — Catalyst и TungstenCatalyst: analysis, logical optimization, physical planning, cost model. Volcano planner. Tungsten: whole-stage codegen, unsafe binary format, off-heap allocation.
07 — Сериализация и row formatUnsafeRow layout, off-heap row encoding, Encoders, Java/Kryo сериализация, Dataset vs DataFrame on-wire format.
08 — AQEAdaptive Query Execution: три стратегии (coalesce, convert join, skew join). Runtime stats сбор. AQEOptimizer. QueryStage barriers. Когда AQE не помогает.
Streaming
09 — Structured StreamingIncrementalExecution, micro-batch vs continuous, StreamExecution, StateStore (HDFS и RocksDB backends), transformWithState internals, watermark в коде.
10 — Apache Arrow и Spark ConnectArrow columnar format в Spark: pandas UDFs, ArrowConverter. Spark Connect: client-server model, ConnectPlan, client-side analysis, remote SparkSession.
Расширение и экосистема
11 — Расширение SparkDataSource V2: ScanBuilder, PartitionReaderFactory, WriteBuilder. Кастомные правила Catalyst (Rule[LogicalPlan]). Extension points через SparkSessionExtensions.
12 — External Shuffle ServiceЗачем нужен ESS, архитектура ExternalShuffleService, ExternalBlockStoreClient, деплой на YARN и Kubernetes. Shuffle данные при рестарте executor-а.
13 — Alternative Execution EnginesComet (Arrow/DataFusion native execution), Gluten (Velox backend). Как они встраиваются через Spark plugin API. Trade-offs и когда использовать.
14 — Исходники и отладкаКак читать Spark source: модульная структура репозитория. Профилирование: async-profiler, flame graphs, Java Flight Recorder. Работа с Spark UI на уровне internals.
Финал
15 — КапстоунProduction debugging capstone: реальные трейсы Spark UI, диагностика инцидентов по метрикам, применение знаний всего курса.
16 — ПриложениеСправочник: параметры конфигурации с объяснениями, классы Spark по подсистемам, глоссарий internals-терминологии.

Раскладка по фазам

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-модули

В курсе есть четыре модуля, которые дают непропорционально большую часть долгосрочной ценности:

Killer-модули Spark Internals
04 — Shuffle internalsShuffle — корень большинства production-проблем. Sort-based shuffle, spill mechanics, external merge sort, Tungsten sort. Без этого невозможно диагностировать 70% slow-stage инцидентов.
06 — Catalyst и TungstenCatalyst plan pipeline + whole-stage codegen. Это то, что делает Spark быстрее Java. Без знания этого невозможно понять, почему план именно такой и как его менять.
05 — Память и storageUnified memory model, MemoryManager, off-heap, BlockManager. Без этого OOM-отладка — гадание. С этим — диагнозируется за минуты.
08 — AQEAQE включён по умолчанию и активно вмешивается в execution. Понимание трёх стратегий и QueryStage barriers необходимо для осмысленного тюнинга.

Эти четыре модуля — около 35% курса по объёму, но закрывают около 65% типичных production-вопросов.

Рекомендуемые learning paths

В зависимости от ваших задач — разные приоритеты.

Path 1: Production debugging (быстрый старт)

Если нужно срочно научиться диагностировать production-инциденты — минимальный фундамент:

  1. 00 -> 01 (установить mental model — 2 часа)
  2. 02 -> 03 (RDD, DAG, scheduler — обязательный контекст)
  3. 04 (shuffle — самая частая причина проблем)
  4. 05 (memory — вторая по частоте)
  5. 06 (Catalyst — для понимания plan)
  6. 08 (AQE — работает по умолчанию, влияет на каждый job)
  7. 14 (debugging tools)

Это около 28 часов. После этого вы можете диагностировать большинство production-инцидентов.

Path 2: Platform engineer / performance тюнинг

Если вы занимаетесь тюнингом кластера или пишете Spark-платформу:

  1. 02 -> 06 (полный фундамент)
  2. 07 (serialization — важно для Dataset vs DataFrame decision)
  3. 08 (AQE — глубоко)
  4. 11 (extending Spark — DataSource V2)
  5. 12 (ESS — критично для больших кластеров)
  6. 13 (Comet/Gluten — если рассматриваете native engines)

Path 3: Streaming-инженер

Если вы пишете Structured Streaming в production:

  1. 02 -> 05 (фундамент — без него streaming-internals не понять)
  2. 06 (Catalyst — IncrementalExecution строится на нём)
  3. 09 (Structured Streaming internals — главный модуль для вас)
  4. 10 (Spark Connect — меняет deployment streaming-приложений)
  5. 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_udf internals есть в модуле 10 (Arrow).
  • История версий до 3.x — упоминаем как контекст, но базовая версия везде 4.0.

Следующий шаг

Следующий урок — прогресс, квизы и экзамены: как устроены контрольные точки курса, как эффективно проходить модульные экзамены.

После intro-блока начинается модуль 01 — Философия internals. Рекомендую не пропускать: он задаёт правильную установку для всего курса.

Проверьте понимание

Результат: 0 из 0
Прикладной
Вопрос 1 из 6. Какие модули курса автор отмечает как ключевые (звёздочкой) и почему?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 3