Определения в 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.