Как стать автором
Обновить
687.55
Яндекс
Как мы делаем Яндекс

YTsaurus — два года в опенсорсе: чего мы достигли и куда движемся

Время на прочтение7 мин
Количество просмотров3.2K

20 марта мы провели митап для пользователей YTsaurus — главной платформы для хранения и обработки больших данных в Яндексе от разработчиков из Yandex Infrastructure, которая уже успела зарекомендовать себя за пределами компании.

Этот текст во многом основан на моем выступлении на митапе: я кратко расскажу, чего мы достигли, какие улучшения внесли и что ждёт пользователей в ближайшем будущем.

Что нового в репозитории?

Мы постоянно улучшаем проект для внешних контрибьюторов. Из последних значимых обновлений:

  • C++ SDK вынесен в отдельное репо (ytsaurus‑cpp‑sdk) с минимальными внешними зависимостями. Теперь подключить возможности YTsaurus к проекту на C++ гораздо проще.

  • Раньше часть сборки YQL шла через репозиторий YDB. Теперь всё нужное доступно в репозитории YTsaurus, туда же можно присылать запрос на внесение изменений.

  • Для каждого пул‑реквеста автоматически запускаются интеграционные тесты. Кстати, сами тесты YTsaurus запускаются параллельно, внутри… кластера YTsaurus. Когда приходит PR, на специальном кластере, развёрнутом в Yandex Cloud, запускается набор Vanilla‑операций, в которых прогоняются тесты. Это даёт быструю обратную связь и удобную диагностику для внешних авторов.

Как развиваются компоненты

Напомню, что архитектурно YTsaurus состоит из трёх слоёв:

  1. Storage Layer, куда входят очереди, статические и динамические таблицы. Он отвечает за хранение данных и метаданных.

  2. Compute Layer отвечает за обработку данных, выполняя распределённые вычисления, используя различные движки обработки: MapReduce, YQL, CHYT, SPYT.

  3. Access Layer — слой доступа к данным: удобный UI, CLI и SDK на Java, Python, GoLang и C++.

Поскольку YTsaurus в первую очередь используется как система для аналитики, начнём с верхнего слоя Compute и аналитических компонентов.

Новое в компонентах для аналитики

CHYT. Это движок ClickHouse внутри платформы, последняя версия которого вышла осенью. В ней мы переработали алгоритм PREWHERE и HTTP‑протокол — теперь он полностью совместим с ClickHouse, что упростило работу с драйверами в разных SDK и BI‑инструментах.

На этот год мы планируем переход на pull‑схему распределения запросов — как в ClickHouse S3 Engine. Это позволит равномернее распределять нагрузку между узлами.

Следующий релиз с обновлением на ClickHouse сейчас проходит стадию стабилизации, мы планируем выпустить его весной.

SPYT. Один из самых популярных продуктов внутри платформы — движок Apache Spark. За прошлый год мы добавили поддержку актуальных версий Spark 3.3, 3.4 и 3.5. А после этого углубились в то, чтобы сделать Spark более эластичным и масштабируемым

Сейчас ведётся работа над собственным Shuffle‑сервисом: на стороне YTsaurus нужное API появится в версии YTsaurus server 25.1. Также готовится поддержка динамической аллокации ресурсов: Spark сможет автоматически масштабировать операции — добавлять или убирать исполнителей в процессе.

Кроме того, улучшаем Spark Streaming: устраняем найденные узкие места, чтобы потоковая обработка стала стабильнее и предсказуемее.

YQL и MapReduce. Продолжаем внедрение формата Arrow для чтения и записи таблиц — он позволяет обрабатывать данные быстрее благодаря блочному представлению.

В ближайших планах — запуск блочных вычислений в YQL. Это ускорит выполнение запросов по сравнению с традиционной построчной обработкой. Планируем релиз уже летом.

Оптимизация запросов. CHYT уже использует min‑max статистики в чанках, чтобы исключать ненужные данные ещё до чтения.

Следующий логический шаг в использовании чанковых статистик: развитие поддержки предикатов в input_query: раньше была фильтрация на уровне строк, а теперь min‑max статистики используются для фильтрации на уровне чанков — это позволяет сокращать объём читаемых данных. В свою очередь YQL научился делать push‑down подходящих предикатов в input_query.

Оптимизатор YQL тоже стал умнее: в слой хранения добавлены HyperLogLog (HLL) статистики, которые помогают точнее оценивать число уникальных значений в колонках и лучше планировать порядок джойнов.

Улучшения UI. Обновили интерфейс Query Tracker: улучшили отрисовку графов планов запросов и добавили новые возможности. Теперь можно строить простые диаграммы (например, гистограммы) прямо в интерфейсе.

Также добавили интеграцию с системами контроля версий — шаблоны запросов можно хранить в Git и выполнять их напрямую из Query Tracker.

Мультикластерные сценарии

Работа с несколькими кластерами YTsaurus становится удобнее. За последний год появились:

  • Возможность копировать файлы между кластерами через remote copy (раньше поддерживались только таблицы).

  • Чтение данных с удалённого кластера напрямую, без необходимости предварительно копировать таблицы.

  • В версии 25.1 добавлен механизм ограничения межкластерной полосы — это помогает контролировать нагрузку на сеть при передаче больших объёмов данных.

В перспективе YQL получит возможность выполнять джойны между таблицами, находящимися в разных кластерах — например, соединять таблицу из кластера А с таблицей из кластера Б.

Развитие работы с данными

YTsaurus развивается не только как аналитическая платформа, но и как инфраструктура для стриминговой и надёжной загрузки данных.

Очереди, Kafka Proxy и Data Ingestion. Очереди и консьюмеры с поддержкой Exactly‑once доступны уже около года. Недавно появился API для продюсеров.

Также добавлена возможность регулярной выгрузки содержимого очередей в статические таблицы — в будущем появится UI для настройки.

В версии 24.2 появился Kafka Proxy: он позволяет приложениям, использующим Kafka‑протокол, напрямую взаимодействовать с очередями YTsaurus. Сейчас идёт интеграция с Debezium для передачи изменений из баз данных в реальном времени.

Стрим‑процессинг. Spark Streaming уже работает поверх очередей YTsaurus. В ближайших релизах появятся улучшения для гибкого управления размером батчей и ресурсов.

Ведётся разработка YTFlow — транзакционного движка для стрим‑процессинга с строгими гарантиями надёжности. В будущем он получит поддержку YQL, что позволит описывать стриминговые задачи на SQL.

Эксплуатация и интроспекция. Timbertruck: агент, который помогает отправлять логи (например, от мастеров) напрямую в динамические таблицы через очереди. Код уже открыт, можно быстро настроить собственные пайплайны логирования.

Bundle_controller: упрощает управление параметрами бандлов динамических таблиц (объём памяти, количество потоков и т. д.). Мы занимаемся тем, чтобы отвязать его от внутренней инфраструктуры Яндекса и дать возможность редактировать настройки через UI в опенсорсе.

Detailed resource usage и Access log viewer — это небольшие микросервисы для анализа логов и мониторинга использования ресурсов. Их код планируется открыть, чтобы пользователи могли легко понять, как используются квоты и кто обращался к данным.

Прочие полезные фичи

  • Airflow: написали провайдер, позволяющий выполнять команды Cypress и задавать запросы через Query Tracker.

  • S3‑медиум: в будущем появится возможность хранить чанки в S3, что особенно востребовано в облачных сценариях.

  • Row‑Level Security: планируем добавить гибкую систему ограничений доступа к строкам таблицы, добавив возможность задавать предикаты на строки в ACL.

Динамические таблицы и Хаос

В динамических таблицах развивается поддержка вторичных индексов, о которой мы уже рассказывали подробнее. С версии 24.2 ими можно пользоваться в продакшн‑среде, а работа над расширением функциональности продолжается. Параллельно совершенствуется язык запросов: он становится ближе к стандарту SQL.

Хаос — механизм геораспределённой репликации динамических таблиц, который мы уже показывали здесь, — активно внедряется внутри Яндекса. В каждом релизе появляются новые улучшения, направленные на повышение стабильности и надёжности этого компонента.

Новые горизонты: ML и масштабирование метаданных

  • YTsaurus для ML. В Яндексе YTsaurus используется как основная платформа для обучения моделей, включая распределённое обучение на GPU. В последнем релизе мы поддержали gang‑операции — одновременное выделение ресурсов для больших задач. Подобные сценарии могут быть интересны и внешним пользователям, работающим с масштабными ML‑нагрузками.

  • Проект «Секвойя». Это крупная переработка архитектуры мастера: метаданные постепенно переносятся в динамические таблицы. Такой подход упрощает масштабирование и устраняет ограничения по объёму. Проект активно разрабатывается, что можно заметить по числу коммитов.

Релизный цикл: как часто ждать обновления

Мы стремимся делать релиз YTsaurus server 3–4 раза в год, но на практике получается чуть реже: 2–3 релиза. Каждый релиз сначала тестируется в несколько этапов внутри Яндекса и только после этого появляется в открытом доступе. Поэтому от коммита до стабильного релиза может пройти до 5–6 месяцев.

Это таймлайн последних релизов: в ноябре мы выложили версию 24.1. В августе отвели ветку 24.2, начали постепенно её стабилизировать и анонсировали как очередной релиз server в марте. А версию 25.1 планируем выложить уже в мае.

Некоторые компоненты — например, CHYT, SPYT, UI, QT+YQL — развиваются в отдельных ветках и могут выпускаться чаще. Если пользователям критически важно получить новую функциональность в стабильную версию server пораньше, в отдельных случаях можно запросить «перенос» (cherry pick) в актуальную стабильную ветку — лучше обсудить это в комьюнити‑чате.


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

Вот ссылки на roadmap:

Если у вас есть идеи или вы хотите задать вопросы — также добро пожаловать в комьюнити‑чат.

Спасибо, что следите за развитием YTsaurus!

Теги:
Хабы:
+34
Комментарии14

Публикации

Информация

Сайт
www.ya.ru
Дата регистрации
Дата основания
Численность
свыше 10 000 человек
Местоположение
Россия