Livy сервер
Начиная с версии 1.74.0 в SPYT доступен сервис Livy, который позволяет осуществлять общение между клиентом и Spark кластером через REST интерфейс. Этот функционал используется в модуле Query tracker для выполнения Spark SQL запросов в YTsaurus.
Дистрибутив Livy уже включен в релизный образ SPYT и помещается на кластер YTsaurus по пути //home/spark/livy/livy.tgz
.
Запуск
Для запуска Livy сервера необходимо в команде запуска кластера SPYT указать опцию --enable-livy
. Максимальное количество одновременных соединений с сервером регулируется опцией --livy-max-sessions
. Попытка установить соединение сверх лимита повлечет ошибку.
Драйвер для Spark задач, запущенных через Livy, поднимается в том же контейнере, что и сервер. Поэтому для корректного подсчета и резервирования ресурсов в YTsaurus количество ядер и размер памяти драйвера устанавливаются при старте кластера — с помощью опций --livy-driver-cores
и --livy-driver-memory
.
$ spark-launch-yt ... --enable-livy --livy-max-sessions 5 --livy-driver-cores 1 --livy-driver-memory 1G
Узнать адрес Livy сервера, как и других компонент, можно через spark-discovery-yt
.
Использование в Query tracker
К запущенному SPYT кластеру можно выполнять запросы из Query tracker (вкладка SPYT) на языке Spark SQL. В settings
необходимо задать поля cluster
(если в инсталляции YTsaurus не установлен кластер по умолчанию) и discovery_path
. Кроме того, в поле spark_conf
может быть передана произвольная конфигурация Spark сессии в виде yson словаря.
В QT версии 0.0.5 была добавлена поддержка аутентификации и переиспользования сессий:
-
В момент начала исполнения запроса Query tracker выпускает для пользователя временный токен, время жизни которого ограничено десятками минут. Полученный токен будет использован при выполнении запроса на SPYT кластере для аутентификации пользователя в YTsaurus, что позволит соблюдать права при чтении/записи данных. В случае длительных запросов временный токен будет периодически пролонгироваться.
-
Если в
settings
полеsession_reuse = true
(значение по умолчанию), тогда запросы не будут закрывать установленное соединение с кластером и по возможности будут переиспользовать его в будущем. Это сокращает время исполнения запроса на 10-20 секунд, однако бездействующие сессии также учитываются в лимите количества одновременных соединений с кластером —livy-max-sessions
. Сессия автоматически завершается, если в течение 10 минут не поступает новых запросов.
Настройка сессии при подключении к серверу напрямую
Эндпоинты Livy сервера описаны в официальной документации.
Для работы с YTsaurus при инициализации Livy сессии в spark_conf
необходимо указать два конфигурационных параметра — путь к Java (spark.yt.jars
) и Python (spark.yt.pyFiles
) библиотекам:
data = {'kind': 'spark', 'conf': {'spark.yt.version': '2.4.0', 'spark.yt.jars': 'yt:///home/spark/spyt/releases/2.4.0/spark-yt-data-source.jar', 'spark.yt.pyFiles': 'yt:///home/spark/spyt/releases/2.4.0/spyt.zip'}}
req = requests.post(host + '/sessions', data=json.dumps(data))
resp = req.json()
Sparkmagic
К серверу Livy можно подключиться через Sparkmagic, который позволяет работать с SPYT кластером в Jupyter ноутбуке посредством REST интерфейса. Это сокращает количество сетевых доступов, требуемых для интерактивной работы на Python, сохраняя функционал. Помимо языка Python в Sparkmagic поддержаны Scala и SQL.