[Документация Yandex Cloud](../../index.md) > [Yandex Managed Service for Apache Spark™](../index.md) > [Практические руководства](index.md) > Интеграция с DataSphere

# Интеграция Managed Service for Apache Spark™ и Yandex DataSphere

# Использование сервиса Yandex Managed Service for Apache Spark™ в DataSphere

В DataSphere вы можете использовать кластеры [Apache Spark™](../index.md), развернутые в сервисе Yandex Managed Service for Apache Spark™. Подключение кластеров Apache Spark™ выполняется с помощью [коннекторов Spark](../../datasphere/concepts/spark-connector.md). Для выполнения вычислений в кластере запускается задание с типом `SparkConnect`.

Чтобы в DataSphere настроить интеграцию с сервисом Managed Service for Apache Spark™:

1. [Подготовьте инфраструктуру](#infra).
1. [Настройте проект DataSphere](#project).
1. [Создайте кластер Managed Service for Apache Spark™ и коннектор Spark](#create-spark).
1. [Запустите вычисления](#run-code).

Если созданные ресурсы вам больше не нужны, [удалите их](#clear-out).

## Перед началом работы {#before-you-begin}

Перед началом работы нужно зарегистрироваться в Yandex Cloud, настроить [сообщество](../../datasphere/concepts/community.md) и привязать к нему [платежный аккаунт](../../billing/concepts/billing-account.md):
1. [На главной странице DataSphere](https://datasphere.yandex.cloud) нажмите **Попробовать бесплатно** и выберите аккаунт для входа — Яндекс ID или рабочий аккаунт в федерации (SSO).
1. Выберите [организацию Yandex Identity Hub](../../organization/index.md), в которой вы будете работать в Yandex Cloud.
1. [Создайте сообщество](../../datasphere/operations/community/create.md).
1. [Привяжите платежный аккаунт](../../datasphere/operations/community/link-ba.md) к сообществу DataSphere, в котором вы будете работать. Убедитесь, что у вас подключен платежный аккаунт, и он находится в [статусе](../../billing/concepts/billing-account-statuses.md) `ACTIVE` или `TRIAL_ACTIVE`. Если платежного аккаунта нет, создайте его в интерфейсе DataSphere.

### Необходимые платные ресурсы {#paid-resources}

* Кластер Managed Service for Apache Spark™: вычислительные ресурсы компонентов кластера ([тарифы Managed Service for Apache Spark™](../pricing.md)).
* NAT-шлюз: почасовое использование шлюза и исходящий через него трафик ([тарифы Virtual Private Cloud](../../vpc/pricing.md)).

## Подготовьте инфраструктуру {#infra}

### Создайте каталог {#create-folder}

Создайте каталог, в котором будет работать ваш кластер Apache Spark™.

{% list tabs group=instructions %}

- Консоль управления {#console}

   1. В [консоли управления](https://kz.console.yandex.cloud) выберите облако и нажмите ![create](../../_assets/console-icons/plus.svg)**Создать каталог**.
   1. Введите имя каталога, например `data-folder`.
   1. Отключите опцию **Создать сеть по умолчанию**, чтобы создать сеть и подсети вручную.
   1. Нажмите **Создать**.

{% endlist %}

[Подробнее об облаках и каталогах](../../resource-manager/concepts/resources-hierarchy.md).

### Создайте сеть {#create-network}

Создайте сеть, в которой будет работать кластер Apache Spark™.

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. В [консоли управления](https://kz.console.yandex.cloud) перейдите в каталог `data-folder`, [созданный ранее](#create-folder).
  1. В списке сервисов выберите **Virtual Private Cloud**.
  1. В правом верхнем углу нажмите **Создать сеть**.
  1. В поле **Имя** укажите имя сети `data-network`.

      Вместе с ней автоматически будут созданы три подсети в разных зонах доступности.

  1. Нажмите **Создать сеть**.

{% endlist %}

### Создайте и настройте NAT-шлюз для доступа в интернет {#create-nat}

{% list tabs group=instructions %}

- Консоль управления {#console}

   1. В каталоге `data-folder` выберите сервис **Virtual Private Cloud**.
   1. На панели слева выберите ![image](../../_assets/console-icons/arrows-opposite-to-dots.svg) **Шлюзы**.
   1. Нажмите **Создать** и задайте настройки шлюза:
      1. Введите имя шлюза, например `nat-for-cluster`.
      1. Выберите **Тип** шлюза — **NAT-шлюз**.
      1. Нажмите **Сохранить**.
   1. На панели слева выберите ![image](../../_assets/console-icons/route.svg) **Таблицы маршрутизации**.
   1. Нажмите **Создать** и введите параметры таблицы маршрутизации:
      1. Введите имя, например `route-table`.
      1. Выберите сеть `data-network`.
      1. Нажмите **Добавить маршрут**.
      1. В открывшемся окне в поле **Next hop** выберите **Шлюз**.
      1. В поле **Шлюз** выберите созданный NAT-шлюз. Префикс назначения заполнится автоматически.
      1. Нажмите **Добавить**.
      1. Нажмите **Создать таблицу маршрутизации**.
   1. Привяжите таблицу маршрутизации к одной из подсетей, чтобы направить трафик из нее через NAT-шлюз:
      1. На панели слева выберите ![image](../../_assets/console-icons/nodes-right.svg) **Подсети**.
      1. В строке нужной подсети нажмите ![image](../../_assets/console-icons/ellipsis.svg).
      1. В открывшемся меню выберите пункт **Привязать таблицу маршрутизации**.
      1. В открывшемся окне выберите созданную таблицу в списке.
      1. Нажмите **Привязать**.

{% endlist %}

### Создайте сервисный аккаунт для кластера Yandex Managed Service for Apache Spark™ {#create-sa}

{% list tabs group=instructions %}

- Консоль управления {#console}

   1. Перейдите в каталог `data-folder`.
   1. В списке сервисов выберите **Identity and Access Management**.
   1. Нажмите кнопку **Создать сервисный аккаунт**.
   1. Введите имя [сервисного аккаунта](../../iam/concepts/users/service-accounts.md), например `sa-for-spark`.
   1. Нажмите **Добавить роль** и назначьте сервисному аккаунту [роли](../../iam/concepts/access-control/roles.md):
      * `managed-spark.user` — для использования кластеров Apache Spark™.
      * `dataproc.agent` — для получения информации о заданиях.
      * `dataproc.user` — для запуска заданий в кластерах Apache Spark™.
      * `vpc.user` — для работы с сетью кластера Apache Spark™.
      * `iam.serviceAccounts.user` — для создания ресурсов в каталоге от имени сервисного аккаунта.

   1. Нажмите **Создать**.

{% endlist %}

## Настройте DataSphere {#project}

Чтобы работать с кластерами Apache Spark™ в DataSphere, создайте и настройте проект.

### Создайте проект {#create-project}

1. Откройте [главную страницу](https://datasphere.yandex.cloud) DataSphere.
1. На панели слева выберите ![image](../../_assets/console-icons/circles-concentric.svg) **Сообщества**.
1. Выберите сообщество, в котором вы хотите создать проект.
1. На странице сообщества нажмите кнопку ![image](../../_assets/console-icons/folder-plus.svg) **Создать проект**.
1. В открывшемся окне укажите имя и (опционально) описание проекта.
1. Нажмите кнопку **Создать**.

### Измените настройки проекта {#change-settings}

1. Перейдите на вкладку **Настройки**.
1. В блоке **Расширенные настройки** нажмите кнопку ![pencil](../../_assets/console-icons/pencil-to-line.svg) **Редактировать**.
1. Укажите параметры:
   * **Каталог по умолчанию** — `data-folder`.
   * **Сервисный аккаунт** — `sa-for-spark`.
   * **Подсеть** — подсеть `data-network-kz1-a`.

     {% note info %}
     
     Если вы указали подсеть в настройках проекта, подготовка ВМ при первом запуске вычислений может занять больше времени.
     
     {% endnote %}

   * [Группы безопасности](../../vpc/concepts/security-groups.md), если они используются в вашей организации.

1. Нажмите **Сохранить**.

### Измените настройки сообщества {#change-settings-community}

Чтобы настроить подключение к кластерам Apache Spark™:

1. Выберите сообщество, в котором вы [создали проект](#create-project).
1. Перейдите на вкладку **Настройки**.
1. В блоке **Сервисный агент** нажмите **Добавить сервисный аккаунт**.
1. В открывшемся окне выберите [созданный ранее](#create-sa) сервисный аккаунт и нажмите **Добавить**.
1. В блоке **Кластеры Spark** нажмите **Добавить сервисный аккаунт** и выберите созданный ранее сервисный аккаунт.

## Создайте кластер Managed Service for Apache Spark™ и коннектор Spark {#create-spark}

1. [Создайте кластер Managed Service for Apache Spark™](../operations/cluster-create.md) любой подходящей конфигурации с параметрами:

    * **Сервисный аккаунт** — `sa-for-spark`.
    * **Сеть** — `data-network`.
    * **Подсеть** — `data-network-kz1-a`.

1. Перейдите в [рабочее пространство DataSphere](https://datasphere.yandex.cloud).
1. На панели слева выберите ![image](../../_assets/console-icons/circles-concentric.svg) **Сообщества**.
1. Откройте сообщество, в котором вы [создали проект](#create-project), и выберите нужный проект.
1. В блоке **Ресурсы проекта** нажмите ![spark-connector](../../_assets/console-icons/route.svg) **Коннектор Spark**.
1. Нажмите **Создать коннектор**.
1. В поле **Имя** задайте имя коннектора. Формат имени:

   * Длина — от 3 до 63 символов.
   * Может содержать строчные и заглавные буквы латинского и русского алфавита, цифры, дефисы, подчеркивания и пробелы.
   * Первый символ должен быть буквой. Последний символ не может быть дефисом, подчеркиванием или пробелом.

1. В блоке **Кластер Yandex Data&nbsp;Processing**:

   1. Нажмите на плитку **Выберите кластер**.
   1. Выберите из списка созданный ранее кластер Managed Service for Apache Spark™.

1. (Опционально) Чтобы использовать бакет Object Storage в вычислениях, в блоке **Настройки S3** укажите идентификатор [статического ключа доступа](../../iam/operations/authentication/manage-access-keys.md#create-access-key) и [секрет](../../datasphere/concepts/secrets.md), в котором хранится секретная часть статического ключа.
1. В блоке **Настройки Spark** укажите параметры задания SparkConnect:

    * Чтобы использовать стандартные настройки кластера Apache Spark™ при выполнении вычислений, выберите опцию **Использовать настройки по умолчанию**.
    * Чтобы вручную дополнить или изменить параметры задания, укажите один или несколько параметров *Ключ* и *Значение*.

1. Нажмите **Создать**. Откроется страница с информацией о созданном коннекторе.

## Запустите вычисления {#run-code}

1. Откройте проект DataSphere:
   
   1. Выберите нужный проект в своем сообществе или на [главной странице](https://datasphere.yandex.cloud) DataSphere во вкладке **Недавние проекты**.
   1. Нажмите кнопку **Открыть проект в JupyterLab** и дождитесь окончания загрузки.
   1. Откройте вкладку с ноутбуком.
1. В ячейку вставьте код для вычисления, например:

   ```python
   df = spark.createDataFrame([(1, "Sarah"), (2, "Maria")]).toDF(*["id", "name"])
   df.show()
   ```

1. Выберите в меню **Run** → **Run Selected Cells** или используйте сочетание клавиш **Shift** + **Enter**.
1. В открывшемся окне **Конфигурации ВМ ноутбука** перейдите на вкладку **Для кластера Yandex Data&nbsp;Processing**.
1. Выберите необходимую конфигурацию и коннектор.
1. Нажмите **Выбрать**.

   В ноутбуке через переменную `spark` станет доступна [локальная сессия PySpark](https://spark.apache.org/docs/3.5.6/api/python/reference/pyspark.sql/api/pyspark.sql.SparkSession.html). В кластере Apache Spark™ будет создано и запущено [задание](../concepts/index.md#job) SparkConnect для выполнения кода ячеек ноутбука.

Чтобы завершить задание в кластере Apache Spark™, остановите ВМ ноутбука.

## Удалите созданные ресурсы {#clear-out}

Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:

1. [Кластер Managed Service for Apache Spark™](../operations/cluster-delete.md).
1. [NAT-шлюз](../../vpc/operations/delete-nat-gateway.md#delete-nat-gateway).

{% endlist %}