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

<!-- source: ru/_includes/user-guide/data-processing/spyt/launch.md -->
# Запуск Spark задач на выполнение в YTsaurus

## Установка пакета ytsaurus-spyt и необходимых зависимостей { #install }

Установите пакет `ytsaurus-spyt` и все необходимые зависимости:

```bash
$ pip install ytsaurus-spyt[all]
```

В этом случае помимо пакета `ytsaurus-spyt` также будут установлены `pyspark` и `ytsaurus-client` последней совместимой версии. При необходимости использования других версий `pyspark` их можно будет установить отдельно с явным указанием версии, например `pip install pyspark==3.2.2`.

Совместимость SPYT с различными версиями Spark приведена [в этой таблице](https://ytsaurus.tech/docs/ru/user-guide/data-processing/spyt/overview.md#spyt-compatibility).

При запуске задач будет использован дистрибутив Spark, номер версии которого совпадает с версией пакета `pyspark` на машине, с которой выполняется запуск. Для загрузки Spark дистрибутива на кластер можно воспользоваться скриптом `tools/release/publisher/spark-distrib.py`.

## Запуск задачи напрямую в YTsaurus (доступно с версии SPYT 1.76.0) { #submit }

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

Запуск задач напрямую в YTsaurus рекомендуется в следующих случаях:

- Выполнение разовых расчетов.
- Запуск задач, имеющих низкую периодичность (реже 1 раза в час).
- Ad-hoc аналитика при помощи консольных утилит `spark-shell`, `pyspark` или `Jupyter`.

Для того чтобы воспользоваться данным способом, необходимо выполнить следующие шаги:

1. Активируйте конфигурацию SPYT при помощи команды `source spyt-env`.
2. Загрузите исполняемый файл и его зависимости в Кипарис. Начиная с версии 2.4.0 также можно указывать локальные файлы как для исполняемого файла, так и для зависимостей.
3. Запустите задачу на выполнение при помощи следующей команды.
```bash
$ spark-submit --master ytsaurus://<cluster-name> --deploy-mode cluster --num-executors 5 --queue research yt:/<path to .py file or .jar file on cypress>
```
При использовании [локальных файлов](https://ytsaurus.tech/docs/ru/user-guide/data-processing/spyt/direct-submit/desc.md#submit-local):
```bash
$ spark-submit --master ytsaurus://<cluster-name> --deploy-mode cluster --num-executors 5 --queue research <path to .py file or .jar file on local drive>
```

Опции:
- `--master` — адрес прокси кластера;
- `--queue` — название пула в планировщике, в котором нужно запустить расчёт

Назначение остальных опций соответствует их описанию в документации `spark-submit` (полный список выводится по команде `spark-submit --help`). Можно использовать почти все доступные опции за исключением следующих:

- `--files, --archives` — с локальными файлами не работают, можно использовать только те, которые были предварительно загружены в Кипарис.

Конфигурационные параметры, доступные при запуске задач напрямую, можно найти [здесь](https://ytsaurus.tech/docs/ru/user-guide/data-processing/spyt/thesaurus/configuration.md#direct-submit)

{% note warning "Внимание" %}

Начиная с версии Spark 3.4.0 при использовании сети с IPv6 адресами необходимо устанавливать переменную окружения `SPARK_PREFER_IPV6=true`

{% endnote %}

## Запуск standalone Spark кластера { #standalone }

Данный способ подходит при интенсивном использовании кластера. В данном режиме YTsaurus выделяет ресурсы под внутренний Standalone Spark кластер, который занимается выполнением расчетов. Для запуска в этом режиме необходимо использовать обёртки над стандартными командами Spark `spark-submit-yt` и `spark-shell-yt`, входящими в состав пакета `ytsaurus-spyt`. Этот режим рекомендуется использовать в следующих случаях:

- Запуск задач с высокой периодичностью (более 1 раза в час). Эффективность достигается за счет того, что время запуска задачи в standalone кластере существенно меньше, чем время запуска операции в YTsaurus.
- Ad-hoc аналитика в Jupyter-ноутбуках.
- Ad-hoc аналитика с использованием Query tracker и livy.

Для запуска внутреннего standalone Spark кластера необходимо выполнить следующие шаги:

1. Выберите пользователя, от имени которого необходимо запустить кластер. Код, который регулярно запускается на Spark, нужно загрузить в систему YTsaurus. У пользователя, от имени которого запущен кластер, должны быть права на чтение кода.
2. Создайте директорию для служебных данных Spark, например `my_discovery_path`. Пользователь, от имени которого запущен кластер, должен иметь права на запись в директорию. Пользователи, которые будут запускать джобы на Spark, должны иметь права на чтение директории.
3. Запустите кластер:
    ```bash
   $ spark-launch-yt \
    --proxy <cluster-name> \
    --pool  my_pool \
    --discovery-path my_discovery_path \
    --worker-cores 16 \
    --worker-num 5 \
    --worker-memory 64G
   ```

   Опции:
    - `spark-launch-yt` — запуск в Vanilla-операции YTsaurus с клиентского хоста;
    - `--proxy` — имя кластера;
    - `--pool` — вычислительный пул YTsaurus;
    - `--spyt-version` — директория для служебных данных Spark;
    - `--worker-cores` — количество ядер у [воркера](https://ytsaurus.tech/docs/ru/user-guide/data-processing/spyt/cluster/cluster-desc.md#spark-standalone-в-yt--spark-standalone);
    - `--worker-num` — количество воркеров;
    - `--worker-memory` — количество памяти у каждого воркера;
    - `--spark-cluster-version` — [версия](https://ytsaurus.tech/docs/ru/user-guide/data-processing/spyt/version.md) кластера (опционально).


4. Запустите тестовый джоб на кластере:
    ```bash
    $ spark-submit-yt \
    --proxy <cluster-name> \
    --discovery-path my_discovery_path \
    --deploy-mode cluster \
    yt:///sys/spark/examples/smoke_test.py
    ```

    Опции:
    - `spark-submit-yt` — обертка над [spark-submit](https://spark.apache.org/docs/latest/submitting-applications.html), позволяет определить адрес мастера Spark из Vanilla-операции. Поиск производится по аргументам: `proxy`, `id`, `discovery-path`;
    - `--proxy` — имя кластера;
    - `--discovery-path` — директория для служебных данных Spark;
    - `--deploy-mode` (`cluster` или `client`) — [режим](https://ytsaurus.tech/docs/ru/user-guide/data-processing/spyt/cluster/cluster-desc.md#cluster-mode--cluster-mode) запуска кластера;
    - `--spyt-version` — версия SPYT (опционально);
    - адрес файла с кодом в YTsaurus.

## Работа с использованием внутреннего Spark кластера { #use }

- **spark-launch-yt**

   Запуск Spark кластера внутри YTsaurus:

    ```bash
    $ spark-launch-yt \
    --proxy <cluster-name> \
    --pool my_pool \
    --discovery-path my_discovery_path \
    --worker-cores 16 \
    --worker-num 5 \
    --worker-memory 64G \
    --spyt-version 2.11.0
    ```

- **spark-discovery-yt**

    Получить ссылки на UI мастера, операцию, Spark History Server:

    ```bash
    $ spark-discovery-yt \
    --proxy <cluster-name> \
    --discovery-path my_discovery_path
    ```

- **spark-submit-yt**

   Запуск задач на кластере:

   ```bash
   $ spark-submit-yt \
   --proxy <cluster-name> \
   --discovery-path my_discovery_path \
   --deploy-mode cluster \
   yt:///sys/spark/examples/smoke_test.py
   ```

   {% note info "Примечание" %}

   Вместо некоторых аргументов команд можно установить переменные окружения, например: `YT_PROXY` — вместо `--proxy`.

   ```bash
   $ export YT_PROXY=<cluster-name>

   $ spark-submit-yt \
   --discovery-path my_discovery_path \
   --deploy-mode cluster \
   yt:///sys/spark/examples/smoke_test.py
   ```

   {% endnote %}

## Использование определённой версии JDK

Начиная с версии SPYT 2.6.0 поддерживаются JDK 11 и JDK 17. Более ранние версии поддерживают только JDK 11. JDK 17 можно использовать только в случае, если версия Spark 3.3.0 и выше, Spark 3.2.x JDK 17 не поддерживает. По умолчанию на кластере будет использоваться та же версия JDK, что и на машине, с которой выполняется запуск задачи.

## Дополнительные параметры

О дополнительных параметрах при запуске кластера можно узнать в разделе [Запуск кластера Spark](https://ytsaurus.tech/docs/ru/user-guide/data-processing/spyt/cluster/cluster-start.md).
<!-- endsource: ru/_includes/user-guide/data-processing/spyt/launch.md -->