SPYT 2.0

Рассказываем про последние обновления в модуле SPYT, который позволяет запускать задачи на Apache Spark® внутри YTsaurus

За последние несколько месяцев в нашем проекте произошел ряд важных изменений, настолько существенных, что мы решили обозначить их как следующий этап в развитии проекта — SPYT 2.0. Итак, основные изменения:

Прямой сабмит Spark‑задач в планировщик YTsaurus

В предыдущих версиях для того, чтобы запускать Spark задачи в YTsaurus, необходимо было поднимать Spark Standlone кластер внутри Vanilla‑операции YTsaurus. Такой подход обладал рядом серьёзных недостатков: во‑первых, работающий Spark Standalone кластер всегда занимает ресурсы, даже если не выполняет никаких задач. Во‑вторых, это усложняло сам процесс запуска приложения из‑за необходимости в дополнительной операции по запуску внутреннего кластера.

Начиная с версии 1.76.0 SPYT позволяет запускать Spark‑приложения непосредственно через планировщик ресурсов YTsaurus. Такой подход позволяет сразу же освобождать вычислительные ресурсы после завершения Spark‑приложения.

Сейчас этот способ работает без поддержки динамического выделения ресурсов (dynamic allocation). В будущем мы планируем разработать единый внешний Shuffle‑сервис в YTsaurus, что позволит поддерживать динамическое выделение ресурсов.

Как запускать Spark задачи с использованием прямого сабмита: документация

Отказались от форка Spark 3.2.2 и сделали возможность работы с другими версиями Spark

Начиная с версии SPYT 2.0.0 мы будем использовать оригинальные дистрибутивы с сайта вместо форкнутой версии Apache Spark®. Это позволит нам поддерживать любой совместимый дистрибутив Spark вместо жесткой привязки к версии 3.2.2.

В ближайшее время мы планируем обеспечить совместимость со всеми релизами 3.x.x и в перспективе с выходящим скоро 4.0.0. На данный момент SPYT совместим с версиями 3.2.2-3.2.4, но их список будет постоянно увеличиваться.

Вынесли SPYT в отдельный репозиторий

В отличие от YTsaurus, который написан на C++, SPYT написан на Scala. Релизный цикл SPYT также в целом не зависит от YTsaurus, поэтому мы решили вынести SPYT в отдельный репозиторий, что позволит нам в ближайшем будущем настроить автотестирование в GitHub для всех пулреквестов. SPYT теперь можно найти тут.

Более глубокая интеграция с Query Tracker

В отличие от первоначального продукта SPYT + QT, который мы выпустили в прошлом году, текущая версия существенно отличается по стабильности и функционалу. Для корректного соблюдения ACL мы внедрили временные токены, для моментального старта новые запросы переиспользуют Spark‑сессию предыдущих. Помимо этого, стали доступны команды создания/записи/удаления таблиц. А сейчас идет активная работа над визуализацией запроса и прогресса исполнения.

И ещё ряд дополнительных улучшений

  • Выполнение SQL‑запросов с использованием Spark SQL как с использованием внутреннего Spark кластера, так и без него;

  • Поддержка Python 3.12;

  • Поддержка Spark Structured Streaming с использованием упорядоченных динамических таблиц в качестве очередей.

Как работать со Structured Streaming: документация

Чтобы обновить SPYT до последней версии, можно воспользоваться Kubernetes‑оператором. В качестве docker образа (параметр image) нужно указать последнюю актуальную версию. На сегодняшний день она равна ghcr.io/ytsaurus/spyt:2.0.0. Пример можно посмотреть тут.

В ближайшем будущем мы собираемся поддерживать уже Spark 4.0, улучшать интеграции с внешними хранилищами данных, построенными на Hadoop, S3 и так даклее, а также научить SPYT работать с GPU.

Приходите попробовать SPYT в действии, и приносите ваши багрепорты в наш беклог. Мы всегда рады любым улучшениям в наш проект — приходите контрибьютить.

Войдите, чтобы сохранить пост