Обзор
В данном разделе можно узнать об основных возможностях и устройстве системы YTsaurus.
Кластеры
Кластер YTsaurus — группа инстансов, расположенных в контейнерах на физических хостах и функционирующих как единое целое.
Исходя из решаемых задач, кластеры могут делиться на:
- вычислительные кластеры для массивной параллельной обработки больших данных при помощи MapReduce операций;
- кластеры для динамических таблиц (key-value хранилище);
- геораспределённые кластеры, выполняющие функции координации.
Вычислительный кластер YTsaurus способен:
- хранить эксабайты данных;
- использовать HDD, SSD и RAM для хранения данных;
- обрабатывать данные на сотнях тысяч Hyper Threading ядер;
- решать задачи машинного обучения на тысячах графических процессоров (GPU);
- хранить и обрабатывать данные десятков тысяч пользователей.
Архитектура
В архитектуре YTsaurus можно выделить три слоя:
- распределённая файловая система и хранилище метаинформации — Кипарис;
- планировщик для распределённых вычислений с поддержкой модели MapReduce;
- высокоуровневые вычислительные движки: YQL, CHYT, SPYT.
Кипарис
Кипарис — отказоустойчивое древовидное хранилище. Возможности Кипариса можно описать следующим образом:
- древовидное пространство имён, узлами которого являются директории, таблицы и файлы;
- прозрачное шардирование больших табличных данных на чанки, которое позволяет работать с таблицей, как единой сущностью, не думая о деталях её хранения;
- поддержка колоночного и строчного механизмов хранения табличных данных;
- поддержка сжатого хранения с использованием различных кодеков — например, lz4 и zstd с настраиваемым уровнем сжатия;
- поддержка erasure-кодирования с использованием разнообразных стратегий подсчета контрольных сумм, обладающих разными параметрами избыточности и допустимых видов потерь;
- выразительная схематизация данных с поддержкой иерархических типов и признаков сортированности данных;
- фоновые репликация и починка erasure-данных, не требующие ручных действий;
- транзакционная семантика с поддержкой вложенных транзакций и блокировок уровней snapshot/shared/exclusive;
- транзакции, которые могут затрагивать много объектов Кипариса и длиться неограниченно долго;
- гибкая система разделения и учёта дискового пространства;
- гибкая система разграничения прав доступа к данным, включая доступ к колонкам таблиц.
Основа Кипариса — реплицированный и горизонтально-масштабируемый мастер-сервер, который хранит метаинформацию об устройстве дерева Кипариса, а также о составе и местоположении реплик чанков всех таблиц на кластере. Мастер-серверы представляют собой Replicated State Machine, реализованную поверх технологии Hydra — in-house версии алгоритма консенсуса, схожей с Raft.
Кипарис реализует отказоустойчивый эластичный слой хранения данных.
Помимо хранения Кипарис может выступать сервисом координации (lock service), по аналогии с Apache Zookeeper.
С пользовательской точки зрения Кипарис похож на дерево файловой системы в Linux. Самый простой способ работать с Кипарисом — использовать веб-интерфейс.
Динамические таблицы
Динамические таблицы — это вид таблиц в YTsaurus, реализующих интерфейс точечного чтения и записи данных по ключу, поддерживающих транзакции и собственный диалект SQL.
Ключевые особенности динамических таблиц:
- хранение данных в модели MVCC, позволяющее читать значения по ключу и таймстемпу;
- масштабируемость: динамическая таблица делится на таблеты (шарды по диапазонам ключей), которые обслуживаются отдельными узлами кластера;
- транзакционность: динамические таблицы — это OLTP-хранилища, позволяющие модифицировать в одной транзакции множество строк из разных таблетов различных таблиц;
- отказоустойчивость: выход отдельного узла кластера, обслуживающего таблет, приводит к тому, что данный таблет переезжает на другой узел кластера без потери данных;
- изоляция: инстансы, обслуживающие таблеты, группируются в бандлы, находящиеся на отдельных серверах, за счет чего обеспечивается изоляция нагрузки;
- проверка конфликтов на уровне отдельных ключей или даже отдельных значений;
- возможность ответа из RAM для горячих данных;
- удаление данных по TTL;
- встроенный SQL-like язык для сканирующих аналитических запросов.
Помимо динамических таблиц с интерфейсом k-v storage в системе есть поддержка динамических таблиц, реализующих абстракцию очереди сообщений — а именно топика и потока. Указанные очереди также можно считать таблицами, потому что они состоят из строк и обладают собственной схемой. В одной транзакции можно одновременно изменять строки в k-v динамической таблице, а также в очереди. Это позволяет строить потоковую обработку данных поверх динамических таблиц YTsaurus с exactly-once семантикой.
MapReduce
В основе вычислительной архитектуры YTsaurus лежит модель распределённых вычислений MapReduce. Операция Map обрабатывает входные данные, разделённые на части между узлами кластера, без обмена данными между узлами. Операция Reduce выполняет группировку данных с разных узлов кластера.
Модель позволяет обрабатывать большие объемы данных с высокой надежностью и автоматически перезапускать часть вычислений в случае недоступности отдельных узлов кластера.
MapReduce в YTsaurus обладает следующими отличительными чертами:
- богатая модель базовых операций: классический MapReduce (с разными стратегиями shuffle и поддержкой многофазного партиционирования), Map, Erase, Sort, и разнообразные расширения модели с учётом сортированности входных данных;
- горизонтальная масштабируемость вычислительных операций: операции дробятся на джобы, которые работают на отдельных узлах кластера;
- поддержка до сотен тысяч джобов в одной операции;
- гибкая модель иерархических вычислительных пулов с мгновенными и интегральными гарантиями, а также fair_share распределением недоутилизированных ресурсов между потребителями без гарантий;
- векторная модель ресурсов, позволяющая заказывать различные вычислительные ресурсы (CPU, RAM, GPU) в разных пропорциях;
- запуск джобов на вычислительных узлах в контейнерах, изолированных друг от друга по CPU, RAM, файловой системе и process namespace с использованием механизма контейнеризации Porto;
- масштабирующийся планировщик, способный обслуживать кластеры с миллионом одновременно исполняемых задач;
- сохранение практически всего прогресса вычислений при обновлениях или выходе отдельных узлов планировщика из строя.
Следует отметить возможность запускать не только MapReduce-джобы, но и произвольный код. В терминологии YTsaurus запуск произвольного кода достигается с помощью ванильных (Vanilla) операций.
YQL
YQL — универсальный, декларативный, основанный на SQL язык запросов к системам хранения и обработки данных, а также инфраструктура для их выполнения.
К преимуществам YQL можно отнести:
- мощный графовый движок исполнения, который строит MapReduce-pipelines из сотен узлов и может адаптивно перестраиваться по ходу вычисления;
- возможность построения сложного конвейера обработки данных на SQL с сохранением подзапросов в переменные в виде цепочек зависимых запросов и транзакций;
- предсказуемое параллельное исполнение запросов произвольной сложности;
- эффективная реализация join-ов, подзапросов и оконных функций без ограничений на их топологию и вложенность;
- богатая библиотека функций;
- поддержка пользовательских функций на C++, Python и JavaScript;
- поддержка функций использования моделей машинного обучения с применением CatBoost и TensorFlow;
- автоматическое исполнение небольших частей запросов на заранее подготовленных вычислительных инстансах в обход MapReduce-операций для уменьшения времени выполнения.
CHYT
ClickHouse over YTsaurus (CHYT) — это технология, которая позволяет поднять кластер из серверов ClickHouse непосредственно на вычислительных узлах YTsaurus.
ClickHouse поднимается внутри Vanilla-операции и работает с данными, которые находятся в YTsaurus. Кластер YTsaurus выступает compute-облаком по отношению к запущенным в нём кластерам CHYT.
Технология позволяет разным пользователям запустить на одном кластере YTsaurus несколько кластеров CHYT, которые будут абсолютно изолированы друг от друга, и решить тем самым задачу разделения ресурсов в облачном стиле.
В экосистеме YTsaurus CHYT отвечает:
- за быстрые аналитические запросы поверх статических таблиц в YTsaurus со временем ответа менее секунды;
- переиспользование уже имеющихся данных в кластере YTsaurus без необходимости копировать их в отдельный кластер ClickHouse;
- возможность интеграции через ODBC и JDBC-драйверы ClickHouse, например, со сторонними системами визуализации такими как: Tableau, Qlik, Power BI, Oracle Bi и DataLens.
Интеграция произведена на довольно низком уровне. Это позволяет получить максимум возможностей как от YTsaurus, так от ClickHouse. В данной интеграции реализована:
- поддержка чтения как статических, так и динамических таблиц;
- частичная поддержка транзакционной модели YTsaurus;
- поддержка распределённых вставок;
- CPU-efficient-преобразование колоночных данных из внутреннего формата YTsaurus в in-memory представление ClickHouse;
- агрессивное кэширование данных, позволяющее в ряде случаев читать данные для исполнения запросов исключительно из памяти инстансов.
SPYT
SPYT — технология, интегрирующая Apache Spark в качестве вычислительного движка поверх данных в YTsaurus. Как и в случае с CHYT, в качестве вычислительных ресурсов под кластер SPYT используются Vanilla операции YTsaurus.
Использование SPYT позволяет минимизировать расходы на IO и достичь многократного роста производительности для сложных аналитических процессов обработки данных.
SPYT может читать как статические, так и динамические таблицы в YTsaurus, выполнять расчёты на них и записывать результат в статическую таблицу YTsaurus.
SDK
Все API на популярных языках программирования (С++, Python, Java, Go) разработаны командой YTsaurus, поэтому в них учтены и продуманы все тонкости взаимодействия с системой. Клиентская часть YTsaurus для упомянутых языков позволяет записать или прочитать большой объем данных несмотря на возможные сетевые сбои и другие ошибки.
Веб-интерфейс
В системе YTsaurus реализован единый веб-интерфейс для пользователей и администраторов. С его помощью можно:
- перемещаться по Кипарису и просматривать данные;
- производить операции с таблицами, папками и файлами;
- запускать и просматривать MapReduce-вычисления;
- запускать и просматривать историю SQL-запросов во всех вычислительных движках — в YQL, CHYT, SQL динамических таблиц;
- администрировать систему:
- следить за состоянием компонент кластера;
- создавать, удалять пользователей и группы;
- управлять квотами;
- просматривать настройки контроля доступа;
- просматривать версии компонент кластера и многое другое.