---
metadata:
  - name: generator
    content: Diplodoc Platform v5.50.6
alternate:
  - https://ytsaurus.tech/docs/en/user-guide/data-processing/spyt/glossary.md
  - https://ytsaurus.tech/docs/ru/user-guide/data-processing/spyt/glossary.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ytsaurus.tech/docs/ru/llms.txt

<!-- source: ru/_includes/user-guide/data-processing/spyt/glossary.md -->
# Определения в 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-cluster }

**SPYT-кластер** — предварительно запущенный Spark Standalone кластер внутри YTsaurus.

Такой кластер состоит из Spark Master, Spark Worker и, как правило, Spark History Server. В YTsaurus он запускается как одна или несколько [Vanilla-операций](#vanilla).

Важно не путать SPYT-кластер с кластером YTsaurus:

- **кластер YTsaurus** — это весь вычислительный кластер;
- **SPYT-кластер** — это Spark Standalone кластер, развернутый внутри кластера YTsaurus.

### Прямой сабмит { #direct-submit }

**Прямой сабмит** (Direct Submit) — режим запуска Spark-приложения без предварительно поднятого SPYT-кластера.

В этом режиме отдельные Spark Master и Spark Worker не используются. Драйвер запускается в YTsaurus напрямую, а экзекьюторы выделяются по требованию. С точки зрения архитектуры роль управления ресурсами в значительной степени берет на себя планировщик YTsaurus.

Прямой сабмит противопоставляется режиму standalone-кластера, где приложение подключается к уже работающему SPYT-кластеру.

## Компоненты Spark в контексте YTsaurus

### Spark Master { #spark-master }

**Spark Master** — компонент Spark Standalone кластера, который управляет воркерами и распределяет ресурсы между Spark-приложениями.

В SPYT Spark Master существует только в режиме standalone-кластера. Он запускается внутри YTsaurus как часть SPYT-кластера и публикует информацию о себе в [discovery_path](#discovery-path).

При прямом сабмите Spark Master нет.

### Spark Worker { #spark-worker }

**Spark Worker** — компонент Spark Standalone кластера, который управляет ресурсами конкретного узла и запускает экзекьюторы по команде Spark Master.

Spark Worker существует только в SPYT-кластере. При прямом сабмите воркеры отсутствуют.

Важно не путать Spark Worker и Executor:

- **Worker** — часть Spark-кластера, управляющая ресурсами узла;
- **Executor** — процесс конкретного Spark-приложения, выполняющий вычисления.

### Spark Driver { #spark-driver }

**Spark Driver** — координирующий процесс Spark-приложения.

Драйвер строит план выполнения, разбивает вычисления на стадии и задачи, запрашивает ресурсы, отправляет задачи экзекьюторам и собирает результаты.

В SPYT драйвер может запускаться:

- как отдельный процесс внутри YTsaurus;
- локально на клиентской машине, если используется client-режим.

Важно не путать драйвер и [Spark Master](#spark-master):

- **Spark Master** управляет кластером;
- **Spark Driver** управляет одним конкретным Spark-приложением.

### Executor { #executor }

**Executor** — процесс Spark-приложения, который непосредственно выполняет задачи на данных.

Экзекьюторы запускаются по запросу драйвера и работают в рамках одного Spark-приложения. Они читают данные, выполняют вычисления, участвуют в shuffle и могут хранить кэшированные данные.

В SPYT экзекьюторы запускаются внутри YTsaurus и используют выделенные YTsaurus ресурсы.

Важно не путать экзекьютор с [Spark Worker](#spark-worker):

- **Worker** предоставляет ресурсы;
- **Executor** потребляет эти ресурсы для выполнения задач приложения.

### Spark History Server { #shs }

**Spark History Server** (SHS) — сервис для просмотра логов завершенных Spark-приложений.

Он позволяет анализировать выполненные приложения, их стадии, задачи, потребление ресурсов и ошибки после завершения работы.

В SPYT SHS обычно запускается как часть SPYT-кластера. Источником данных для него служат event log-и Spark-приложений.

## Данные — таблицы YTsaurus vs абстракции Spark { #data }

### Spark Partition и YTsaurus Chunk/Partition { #partitions }

В контексте 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 }

**DataFrame** — основная структурированная абстракция данных в Spark SQL.

DataFrame представляет собой набор строк с именованными колонками и схемой. В SPYT DataFrame обычно создается чтением таблиц YTsaurus.

Важно не путать DataFrame и таблицу YTsaurus:

- **таблица YTsaurus** — объект хранения данных в YTsaurus;
- **DataFrame** — представление данных внутри Spark-приложения.

## Инфраструктура и интеграция { #infra }

### discovery_path { #discovery-path }

**`discovery_path`** — путь в Кипарисе YTsaurus, по которому Spark-приложения находят запущенный SPYT-кластер.

В кластерном режиме Spark Master публикует в этом пути служебную информацию: адреса сервисов, параметры подключения и другие метаданные кластера.

`discovery_path` — специфичное для SPYT понятие. В стандартном Spark такого механизма нет.

### Vanilla-операция YTsaurus { #vanilla }

**Vanilla-операция YTsaurus** — универсальный тип операции YTsaurus для запуска произвольных пользовательских процессов.

В SPYT именно Vanilla-операции используются для запуска компонентов Spark-инфраструктуры:

- `Spark Master`;
- `Spark Worker`;
- `Spark Driver`;
- `Executor`;
- `Spark History Server`.


### Shuffle { #shuffle }

**Shuffle** — механизм перераспределения данных между экзекьюторами в Spark.

Shuffle возникает, когда для дальнейших вычислений данные нужно перегруппировать по ключу или перераспределить между узлами. Типичные примеры — `join`, `groupBy`, `distinct`, сортировки и некоторые оконные операции.

Shuffle — одна из самых дорогих операций в Spark, потому что она связана с сетевым обменом, сериализацией, записью промежуточных данных и дополнительной нагрузкой на память и диск.

### YTsaurus Shuffle Service { #yt-shuffle-service }

**YTsaurus Shuffle Service** — реализация инфраструктуры shuffle для SPYT поверх YTsaurus.

Он используется для хранения и передачи промежуточных shuffle-данных в интеграции Spark с YTsaurus. Это инфраструктурный компонент, который помогает адаптировать модель shuffle Spark к среде YTsaurus.

Важно различать:

- **shuffle** — механизм Spark;
- **YTsaurus Shuffle Service** — инфраструктурная реализация хранения и передачи shuffle-данных в YTsaurus.

## Единицы работы — Spark vs YTsaurus { #units }

### Spark Application { #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 Job** — единица вычислений внутри Spark-приложения, которая обычно порождается одним action.

Например, вызовы `count()`, `collect()`, `show()` или запись результата могут запускать отдельные Spark Job.

Spark Job делится на:

- **stage** — стадия выполнения;
- **task** — отдельная задача внутри стадии.

### YTsaurus Job { #yt-job }

**YTsaurus Job** — процесс, запущенный планировщиком YTsaurus в рамках YTsaurus-операции.

Это инфраструктурная единица исполнения в YTsaurus. Например, в контексте SPYT YTsaurus Job может соответствовать процессу, внутри которого работает экзекьютор или другой компонент Spark.

Разница между Spark Job и YTsaurus Job принципиальна:

- **Spark Job** — логическая единица плана выполнения Spark;
- **YTsaurus Job** — инфраструктурный процесс, запущенный YTsaurus.
<!-- endsource: ru/_includes/user-guide/data-processing/spyt/glossary.md -->
