Архитектура Trino
Обзор
Trino — это движок SQL-запросов с открытым исходным кодом, используемый для параллельной обработки данных, распределенных по хранилищам разного типа, таких как объектные хранилища (S3), базы данных и файловые системы.
Он был разработан для OLAP (Online Analytical Processing) и неэффективен для OLTP (Online Transaction Processing).
Все компоненты сервиса можно разместить на одном хосте. Несколько нод Trino, настроенные для совместной работы друг с другом, составляют кластер Trino.
Концепции
В Trino существуют следующие основные концепции:
-
Коннекторы
Коннектор — это плагин Trino, который создает соединение с источником данных с помощью интерфейса поставщика услуг (Service Provider Interface, SPI). Один коннектор может использоваться для доступа к одному или нескольким источникам данных одного типа.
-
Каталог
Каталог — это абстракция Trino для доступа к определенному источнику данных (например, базе данных MySQL). Он содержит настройки подключений, учетные данные, URL и т.д. Каждый каталог использует определенный коннектор, указанный в свойстве
connector.name
. Каталог содержит одну или несколько схем, которые также содержат объекты, такие как таблицы или представления. Больше информации о каталогах можно получить в статье Управление каталогами в Trino. -
Схема
Схема определяет данные, которые можно запросить. Для реляционной базы данных схема Trino повторяет схему в целевой базе данных, но для других источников данных схема может быть представлена как другой тип организации таблиц.
-
Выражение (statement)
Выражение в Trino — это текстовое представление оператора, написанного на SQL. При выполнении оператора Trino создает запрос и план запроса, которые реализуются как ряд взаимосвязанных этапов, выполняемых на рабочих узлах Trino.
-
Этап (stage)
В Trino каждое выполнение запроса делится на несколько этапов, имеющих древовидную иерархию. Когда Trino собирает данные из хранилища, он создает корневой этап для агрегирования выходных данных других этапов, а те уже выполняют задачи распределенного плана самого запроса.
-
Задача (task)
Задача Trino — это часть запроса, которая выполняется на сервере Trino Worker. Каждый этап выполнения может быть представлен несколькими задачами.
-
Сплит (split)
Сплит — это небольшая часть целевого набора данных, обрабатываемая на раннем этапе выполнения запроса. При составлении плана выполнения запроса Trino Coordinator запрашивает у коннектора список всех сплитов, доступных для таблицы.
Компоненты
Архитектура Trino основана на следующих компонентах:
-
Trino Coordinator
Координатор — это сервер Trino, обрабатывающий входящие запросы клиентов. Он управляет серверами Trino Worker, которые выполняют эти запросы. Координатор отслеживает какие узлы выполняют задачи и какие сплиты обрабатываются задачами.
-
Trino Worker
Trino Worker — это сервер Trino, отвечающий за выполнение задач и обработку данных.
Кластер Trino состоит из одного сервера Trino Coordinator и нескольких Trino Worker. Вся коммуникация и передача данных между компонентами Trino происходит через HTTP/HTTPS.
Коннекторы
Trino содержит множество встроенных коннекторов для различных источников данных:
-
Озера и хранилища данных: HDFS, Hive, Iceberg и другие.
-
Реляционные базы данных: MariaDB, MySQL, PostgreSQL, Oracle, ADPG и т.д.
-
Другие системы и утилиты: Cassandra, ClickHouse, OpenSearch, Prometheus, Snowflake, JMX и т.д.
Дополнительную информацию о коннекторах можно получить в статье Обзор коннекторов в Trino.