Определения в SPYT
SPYT находится на пересечении двух систем:
- Apache Spark как вычислительного движка;
- YTsaurus как среды хранения данных, выделения ресурсов и запуска процессов.
Из-за этого одни и те же термины в документации и обсуждениях могут означать разные сущности в зависимости от контекста. Например, термины «кластер», «джоба», «операция», «партиция», «таблица» и т.п. в Spark и YTsaurus используются по-разному.
Цель этого раздела — дать единый набор определений и помочь разграничить пересекающиеся понятия Spark, SPYT и YTsaurus.
SPYT и режимы запуска
SPYT
SPYT (Spark over YTsaurus) — интеграция Apache Spark с инфраструктурой YTsaurus.
SPYT позволяет запускать Spark-приложения на данных, хранящихся в YTsaurus, и использовать YTsaurus как среду выделения ресурсов, хранения данных, логов и служебной информации.
SPYT не является отдельным вычислительным движком: вычисления выполняет Spark, а YTsaurus предоставляет инфраструктурный слой.
SPYT-кластер
SPYT-кластер — предварительно запущенный Spark Standalone кластер внутри YTsaurus.
Такой кластер состоит из Spark Master, Spark Worker и, как правило, Spark History Server. В YTsaurus он запускается как одна или несколько Vanilla-операций.
Важно не путать SPYT-кластер с кластером YTsaurus:
- кластер YTsaurus — это весь вычислительный кластер;
- SPYT-кластер — это Spark Standalone кластер, развернутый внутри кластера YTsaurus.
Прямой сабмит
Прямой сабмит (Direct Submit) — режим запуска Spark-приложения без предварительно поднятого SPYT-кластера.
В этом режиме отдельные Spark Master и Spark Worker не используются. Драйвер запускается в YTsaurus напрямую, а экзекьюторы выделяются по требованию. С точки зрения архитектуры роль управления ресурсами в значительной степени берет на себя планировщик YTsaurus.
Прямой сабмит противопоставляется режиму standalone-кластера, где приложение подключается к уже работающему SPYT-кластеру.
Компоненты Spark в контексте YTsaurus
Spark Master
Spark Master — компонент Spark Standalone кластера, который управляет воркерами и распределяет ресурсы между Spark-приложениями.
В SPYT Spark Master существует только в режиме standalone-кластера. Он запускается внутри YTsaurus как часть SPYT-кластера и публикует информацию о себе в discovery_path.
При прямом сабмите Spark Master нет.
Spark Worker
Spark Worker — компонент Spark Standalone кластера, который управляет ресурсами конкретного узла и запускает экзекьюторы по команде Spark Master.
Spark Worker существует только в SPYT-кластере. При прямом сабмите воркеры отсутствуют.
Важно не путать Spark Worker и Executor:
- Worker — часть Spark-кластера, управляющая ресурсами узла;
- Executor — процесс конкретного Spark-приложения, выполняющий вычисления.
Spark Driver
Spark Driver — координирующий процесс Spark-приложения.
Драйвер строит план выполнения, разбивает вычисления на стадии и задачи, запрашивает ресурсы, отправляет задачи экзекьюторам и собирает результаты.
В SPYT драйвер может запускаться:
- как отдельный процесс внутри YTsaurus;
- локально на клиентской машине, если используется client-режим.
Важно не путать драйвер и Spark Master:
- Spark Master управляет кластером;
- Spark Driver управляет одним конкретным Spark-приложением.
Executor
Executor — процесс Spark-приложения, который непосредственно выполняет задачи на данных.
Экзекьюторы запускаются по запросу драйвера и работают в рамках одного Spark-приложения. Они читают данные, выполняют вычисления, участвуют в shuffle и могут хранить кэшированные данные.
В SPYT экзекьюторы запускаются внутри YTsaurus и используют выделенные YTsaurus ресурсы.
Важно не путать экзекьютор с Spark Worker:
- Worker предоставляет ресурсы;
- Executor потребляет эти ресурсы для выполнения задач приложения.
Spark History Server
Spark History Server (SHS) — сервис для просмотра логов завершенных Spark-приложений.
Он позволяет анализировать выполненные приложения, их стадии, задачи, потребление ресурсов и ошибки после завершения работы.
В SPYT SHS обычно запускается как часть SPYT-кластера. Источником данных для него служат event log-и Spark-приложений.
Данные — таблицы YTsaurus vs абстракции Spark
Spark Partition и YTsaurus Chunk/Partition
В контексте SPYT слово «партиция» может относиться к разным сущностям, поэтому важно различать как минимум три понятия: Spark Partition, YTsaurus Chunk и YTsaurus Partition.
Spark Partition — единица параллелизма в Spark.
Одна задача Spark обычно обрабатывает одну Spark-партицию. Именно Spark Partition определяет, как данные распределяются между задачами и с каким уровнем параллелизма будет выполняться чтение или вычисление.
YTsaurus Chunk — единица физического хранения данных в YTsaurus.
Чанк — это низкоуровневый объект хранения и репликации. Таблица YTsaurus физически состоит из чанков, а чтение данных в batch-сценариях в конечном счете опирается именно на них.
YTsaurus Partition — логическое разбиение данных в YTsaurus, зависящее от типа таблицы и сценария обработки.
При чтении таблиц YTsaurus через SPYT эти сущности не совпадают напрямую:
- chunk относится к физическому хранению данных в YTsaurus;
- YTsaurus partition относится к логическому или внутреннему разбиению данных в YTsaurus;
- Spark partition относится к выполнению вычислений в Spark.
DataFrame
DataFrame — основная структурированная абстракция данных в Spark SQL.
DataFrame представляет собой набор строк с именованными колонками и схемой. В SPYT DataFrame обычно создается чтением таблиц YTsaurus.
Важно не путать DataFrame и таблицу YTsaurus:
- таблица YTsaurus — объект хранения данных в YTsaurus;
- DataFrame — представление данных внутри Spark-приложения.
Инфраструктура и интеграция
discovery_path
discovery_path — путь в Кипарисе YTsaurus, по которому Spark-приложения находят запущенный SPYT-кластер.
В кластерном режиме Spark Master публикует в этом пути служебную информацию: адреса сервисов, параметры подключения и другие метаданные кластера.
discovery_path — специфичное для SPYT понятие. В стандартном Spark такого механизма нет.
Vanilla-операция YTsaurus
Vanilla-операция YTsaurus — универсальный тип операции YTsaurus для запуска произвольных пользовательских процессов.
В SPYT именно Vanilla-операции используются для запуска компонентов Spark-инфраструктуры:
Spark Master;Spark Worker;Spark Driver;Executor;Spark History Server.
Shuffle
Shuffle — механизм перераспределения данных между экзекьюторами в Spark.
Shuffle возникает, когда для дальнейших вычислений данные нужно перегруппировать по ключу или перераспределить между узлами. Типичные примеры — join, groupBy, distinct, сортировки и некоторые оконные операции.
Shuffle — одна из самых дорогих операций в Spark, потому что она связана с сетевым обменом, сериализацией, записью промежуточных данных и дополнительной нагрузкой на память и диск.
YTsaurus Shuffle Service
YTsaurus Shuffle Service — реализация инфраструктуры shuffle для SPYT поверх YTsaurus.
Он используется для хранения и передачи промежуточных shuffle-данных в интеграции Spark с YTsaurus. Это инфраструктурный компонент, который помогает адаптировать модель shuffle Spark к среде YTsaurus.
Важно различать:
- shuffle — механизм Spark;
- YTsaurus Shuffle Service — инфраструктурная реализация хранения и передачи shuffle-данных в YTsaurus.
Единицы работы — Spark vs YTsaurus
Spark Application
Spark Application — единица пользовательской программы в Spark.
Spark-приложение состоит из:
- одного драйвера;
- набора экзекьюторов;
- логического плана вычислений и связанных с ним job, stage и task.
С практической точки зрения один запуск spark-submit, spark-submit-yt или одна пользовательская Spark-сессия соответствует одному Spark Application.
Важно не путать Spark Application с операцией YTsaurus, Spark Job, YTsaurus Job:
- Spark Application — логическая единица выполнения в Spark;
- операция YTsaurus — инфраструктурная единица запуска процессов в YTsaurus.
Одно Spark-приложение в SPYT может использовать одну или несколько YTsaurus-операций для запуска своих компонентов. И наоборот одна YTsaurus-операция может использоваться для запуска нескольких Spark-приложений (standalone-кластер)
Spark Job
Spark Job — единица вычислений внутри Spark-приложения, которая обычно порождается одним action.
Например, вызовы count(), collect(), show() или запись результата могут запускать отдельные Spark Job.
Spark Job делится на:
- stage — стадия выполнения;
- task — отдельная задача внутри стадии.
YTsaurus Job
YTsaurus Job — процесс, запущенный планировщиком YTsaurus в рамках YTsaurus-операции.
Это инфраструктурная единица исполнения в YTsaurus. Например, в контексте SPYT YTsaurus Job может соответствовать процессу, внутри которого работает экзекьютор или другой компонент Spark.
Разница между Spark Job и YTsaurus Job принципиальна:
- Spark Job — логическая единица плана выполнения Spark;
- YTsaurus Job — инфраструктурный процесс, запущенный YTsaurus.