Вычисления на кластерах Apache Spark™ в DataSphere
Сервис Yandex Data Proc позволяет разворачивать кластеры Apache Spark™. Вы можете использовать кластеры Data Proc, чтобы запускать распределенные обучения на кластерах. DataSphere поддерживает работу в сессиях, созданных с помощью Apache Livy
Варианты развертывания кластеров
Вы можете развернуть кластер для вычислений в DataSphere двумя способами:
- создать кластер в DataSphere, используя специальный ресурс — шаблон Data Proc;
- самостоятельно создать кластер в сервисе Yandex Data Proc и интегрировать его в проект DataSphere.
Все кластеры Data Proc вне зависимости от варианта развертывания тарифицируются по правилам сервиса Yandex Data Proc. Все кластеры, доступные в проекте, можно посмотреть в разделе Ресурсы проекта ⟶ Data Proc на странице проекта.
Шаблоны Data Proc
В шаблоне Data Proc вы выбираете одну из предопределенных конфигураций кластера. На основе шаблона Data Proc, активированного в проекте, DataSphere развернет временный кластер, используя необходимые параметры проекта.
DataSphere следит за работой временных кластеров. Если в течение двух часов кластер не используется для вычислений, DataSphere его выключит. Вы можете повторно развернуть кластер в проекте, когда он вам понадобится. Вы также можете делиться шаблонами Data Proc с другими пользователями.
Подробнее о работе с шаблонами Data Proc.
Интеграция с сервисом Yandex Data Proc
Если вы уже работали с сервисом Yandex Data Proc, или стандартные конфигурации шаблонов вам не подходят, вы можете развернуть кластер и использовать его для вычислений в DataSphere.
Важно
Используя кластер, развернутый в сервисе Data Proc, вы управляете его жизненным циклом кластера самостоятельно. Даже если вычислений нет больше двух часов, кластер будет работать и тарифицироваться, пока вы его не выключите.
Для корректной интеграции с DataSphere развернутый кластер Data Proc должен иметь версию образа не ниже 1.3
с включенными сервисами LIVY
, SPARK
, YARN
и HDFS
.
Примечание
Чтобы получить из кластера Data Proc данные больше 100 МБ, используйте коннектор S3.
Настройки проекта DataSphere для работы с кластерами Data Proc
Для работы с кластерами Data Proc укажите в настройках проекта следующие параметры:
-
Каталог по умолчанию для интеграции с другими сервисами Yandex Cloud. В нем будет развернут кластер Data Proc в рамках текущих квот облака, а стоимость использования кластера будет списана с платежного аккаунта облака.
-
Сервисный аккаунт, от имени которого DataSphere будет создавать и управлять кластерами. Сервисному аккаунту понадобятся следующие роли:
dataproc.agent
— для использования кластеров Data Proc.dataproc.admin
— для создания кластеров из шаблонов Data Proc.vpc.user
— для работы с сетью кластера Data Proc.iam.serviceAccounts.user
— для создания ресурсов в каталоге от имени сервисного аккаунта.
-
Подсеть для связи DataSphere с кластером Data Proc. Кластеру Data Proc необходим доступ в интернет, поэтому в подсети должен быть настроен NAT-шлюз.
Примечание
Если вы указали подсеть в настройках проекта, время выделения вычислительных ресурсов может быть увеличено.
Вычислительные сессии
В кластере Data Proc ваш код выполняется в сессиях
Для управления сессиями используйте следующие команды:
%create_livy_session --cluster <имя_кластера> --id <идентификатор_сессии>
— создание сессии;%delete_livy_session --cluster <имя_кластера> --id <идентификатор_сессии>
— удаление сессии.
Например, следующая команда создаст в кластере my-new-cluster
сессию ses1
, которая позволит каждому процессу использовать максимум 4 ядра CPU в кластере и 4 ГБ RAM (подробнее см. в документации Spark
%create_livy_session --cluster my-new-cluster --id ses1 --conf spark.cores.max=4 --conf spark.executor.memory=4g
По умолчанию в сессиях включено динамическое выделение ресурсов. Чтобы ограничить ресурсы сессии, используйте параметр --conf spark.dynamicAllocation.enabled=false
.
Параметры livy-сессии
Полный список параметров для команды %create_livy_session
:
Параметр | Тип | Описание |
---|---|---|
--cluster |
string |
Идентификатор или имя кластера Data Proc |
--id |
string |
Идентификатор сессии, произвольная строка. Если не указан, то формируется автоматически |
--conf |
string |
Свойства конфигурации Spark |
--proxyUser |
string |
Логин пользователя операционной системы кластера Data Proc, от имени которого будет выполняться задание. По умолчанию spark |
--jars |
string |
Библиотеки Java для использования в сессии |
--files |
string |
Файлы для использования в сессии |
--pyFiles |
string |
Python-файлы для использования в сессии |
--driverMemory |
string |
Объем памяти драйвера |
--driverCores |
int |
Количество ядер для драйвера |
--executorMemory |
string |
Объем памяти процесса-исполнителя |
--executorCores |
int |
Количество ядер для процесса-процесса |
--numExecutors |
int |
Количество процессов-исполнителей |
--archives |
string |
Архивы для использования в сессии |
--queue |
string |
Название очереди YARN |
--variables |
string |
Переменные для использования в сессии |
--return_variables |
string |
Переменные, которые передадутся из сессии |
--heartbeatTimeoutInSecond |
int |
Время бездействия до завершения сеанса |
--ttl |
string |
Время ожидания неактивного сеанса |
Подробнее о параметрах livy-сессии см. в официальной документации
Ограничения сессий Data Proc
DataSphere использует системные переменные для работы с кластером Data Proc. Не переопределяйте значения следующих переменных:
sc
spark
HiveContext
StreamingContext
SqlContext
Следующие глобальные конфигурации Spark переопределяются параметрами, необходимыми для выполнения заданий Livy:
spark.jars
spark.submit.deployMode
spark.yarn.dist.archives
spark.submit.pyFiles
spark.yarn.maxAppAttempts
spark.yarn.submit.waitAppCompletion
Чтобы задать дополнительные библиотеки для сессии Spark, используйте параметры spark.driver.extraClassPath
и spark.executor.extraClassPath
, а сами библиотеки разместите на всех узлах во время создания кластера Data Proc с помощью скриптов инициализации. Пути к используемым библиотекам должны совпадать на всех узлах кластера.
Запуск python-кода в кластере
Код запускается в ячейках с заголовком:
#!spark [--cluster <кластер>] [--session <сессия>] [--variables <входящая_переменная>] [--return_variables <возвращаемая_переменная>]
Где:
--cluster
— кластер Data Proc, на котором будут производиться вычисления. Может быть:- Именем кластера, созданного через интерфейс ноутбука.
- HTTP-ссылкой на внутренний IP-адрес хоста
masternode
, напримерhttp://10.0.0.8:8998/
.
--session
— идентификатор вычислительной сессии. Если параметр пропущен, используется сессия кластера Data Proc по умолчанию.--variables
— переменная, импортированная из DataSphere в кластер Data Proc. Поддерживаемые типы:bool
,int
,float
,str
,pandas.DataFrame
(преобразовывается в Spark DataFrame в кластере).--return_variables
— переменная, которая будет экспортирована из кластера Data Proc в DataSphere. Поддерживаемые типы:bool
,int
,float
,str
,pandas.DataFrame
(преобразованный Spark DataFrame).
Пример использования вычислительных сессий с пользовательскими параметрами
Чтобы запустить вычисления в сессии с заданными настройками, сначала создайте сессию, а затем передайте код в ячейке с заголовком #!spark
:
-
Создайте сессию и определите ее параметры:
%create_livy_session --cluster my-new-cluster --id ses1 --conf spark.cores.max=4 --conf spark.executor.memory=4g
-
В следующей ячейке запустите вычисления:
#!spark --cluster my-new-cluster --session ses1 import random def inside(p): x, y = random.random(), random.random() return x*x + y*y < 1 NUM_SAMPLES = 1_000_000 count = sc.parallelize(range(0, NUM_SAMPLES)) \ .filter(inside).count() print("Pi is roughly %f" % (4.0 * count / NUM_SAMPLES))
-
Если сессия вам больше не нужна, удалите ее:
%delete_livy_session --cluster my-new-cluster --id ses1
Работа с библиотекой Spark SQL
DataSphere может работать с библиотекой Spark SQL. Например, следующий запрос вернет все записи в таблице animals
, созданной в кластере cluster test-dataproc-cluster
:
#!spark --cluster test-dataproc-cluster --return_variables df
df = spark.sql("SELECT * FROM animals;")
df
Подробнее о синтаксисе SQL-запросов и работе с библиотекой Spark SQL см. в официальной документации