Learning Platform
Глоссарий Troubleshooting
Урок 01.03 · 22 мин
Средний
dockertrino-clisandboxsetup

Среда разработки: Docker, Trino CLI, песочница курса

Trino — распределённая система, и может показаться, что для практики нужен настоящий кластер из нескольких машин или облачный аккаунт. Это не так. Trino отлично запускается локально в одном контейнере Docker, где координатор и воркер совмещены в одном процессе. Этого достаточно, чтобы пройти большую часть курса: писать SQL, читать EXPLAIN, изучать системные каталоги, ставить эксперименты.

Этот урок настраивает вашу рабочую среду. Мы поднимем Trino в Docker, подключимся к нему через официальный CLI, выполним первые запросы и разберём, как устроена песочница курса — набор системных каталогов, на которых можно учиться без подключения внешних баз данных.


Почему Docker

Trino написан на Java и для запуска требует подходящей версии JDK, правильно настроенного heap и каталога с конфигурацией из нескольких файлов. Ставить всё это вручную на каждую машину — лишняя работа и источник ошибок: на одном ноутбуке не та Java, на другом конфликт версий.

Docker снимает эту проблему целиком. Официальный образ trinodb/trino уже содержит правильную JDK, сервер Trino и рабочую конфигурацию по умолчанию. Вы запускаете один контейнер — и у вас работающий Trino, идентичный у всех, кто проходит курс. Тег образа совпадает с номером версии Trino: trinodb/trino:481 — это Trino версии 481.

Что внутри контейнера trinodb/trino
Docker-образОфициальный образ trinodb/trino с тегом версии, например trinodb/trino:481
содержит
JDKПодходящая версия Java, нужная серверу Trino этого релиза — её не нужно ставить вручную
Сервер TrinoПроцесс Trino: в одиночном контейнере он одновременно и координатор, и воркер
КонфигурацияКаталог etc с config.properties, node.properties, jvm.config и каталогами по умолчанию

Для практики курса вам понадобится установленный Docker (Docker Desktop или OrbStack на Mac, Docker Engine на Linux). Проверить, что он работает:

Docker: образ против контейнера
docker --version
# Docker version 27.5.1, build 9f9e405

docker info | grep "Server Version"
#  Server Version: 27.5.1

Запуск Trino одним контейнером

Самый быстрый способ поднять Trino — запустить официальный образ напрямую. Координатор и воркер в этом случае живут в одном процессе: для обучения этого полностью достаточно, разницу между ролями мы подробно разберём в модуле про MPP-архитектуру.

docker run --name trino -d -p 8080:8080 trinodb/trino:481

Разберём флаги. --name trino даёт контейнеру понятное имя, чтобы потом обращаться к нему по имени, а не по id. -d запускает контейнер в фоне (detached). -p 8080:8080 пробрасывает порт 8080 контейнера на порт 8080 вашей машины — это HTTP-порт, на котором Trino слушает и клиентов, и Web UI. trinodb/trino:481 — образ с явным тегом версии.

Trino стартует не мгновенно — JVM нужно прогреться несколько десятков секунд. Дождаться готовности можно так:

docker logs -f trino 2>&1 | grep -m1 "SERVER STARTED"
# 2026-05-20T08:14:03.512Z  INFO  main  io.trino.server.Server  ======== SERVER STARTED ========

Строка SERVER STARTED означает, что сервер принял конфигурацию и готов обслуживать запросы. Теперь можно открыть в браузере http://localhost:8080 — это Web UI Trino, где видны все запросы кластера. Логином может быть любое имя пользователя, пароль на дефолтной конфигурации не требуется.

WARNING

Если порт 8080 на вашей машине занят (его часто использует другой сервис), Docker выдаст ошибку привязки порта. Поменяйте левую часть проброса: -p 8081:8080. Тогда Trino будет доступен на http://localhost:8081, а внутри контейнера он по-прежнему слушает 8080.

Trino CLI

Web UI хорош для наблюдения за запросами, но писать SQL удобнее в командной строке. Для этого есть официальный Trino CLI — клиент, который отправляет запросы на координатор и показывает результаты в терминале.

CLI — это self-executable JAR-файл, его можно скачать с trino.io. Но проще всего не ставить ничего отдельно, а воспользоваться тем же Docker-образом: внутри trinodb/trino CLI уже лежит. Подключиться к только что запущенному контейнеру можно так:

docker exec -it trino trino

Здесь docker exec -it trino запускает команду внутри уже работающего контейнера trino в интерактивном режиме, а последнее слово trino — это и есть запуск CLI. Без дополнительных аргументов CLI подключается к локальному координатору на localhost:8080. Вы увидите приглашение:

trino>

Это интерактивная сессия. Проверим, что всё работает, и заодно посмотрим версию сервера:

SELECT version();
 _col0
-------
 481
(1 row)

Сервер ответил номером своей версии. Если число отличается от 481 — значит, вы запустили образ с другим тегом, и это нормально: Trino выходит часто, и более свежая версия для курса вполне подходит.

Когда CLI запускают не внутри контейнера, а как отдельный JAR, ему нужно явно указать адрес сервера и каталог по умолчанию:

trino --server localhost:8080 --catalog tpch --schema sf1

Флаг --server задаёт адрес координатора, --catalog и --schema — каталог и схему по умолчанию, чтобы не писать их полное имя в каждом запросе. Что такое каталог и схема, разберём прямо сейчас.

Песочница курса: системные каталоги

Trino сам по себе не хранит данных — чтобы что-то запросить, нужен подключённый источник. Но для обучения не обязательно сразу поднимать PostgreSQL или загружать файлы на S3. У Trino есть набор встроенных системных каталогов, которые работают сразу после старта и служат идеальной песочницей. Это и есть учебная среда курса на первых модулях.

Адрес любой таблицы в Trino состоит из трёх частей: catalog.schema.table. Каталог — это подключение к источнику; схема — группа таблиц внутри него; таблица — собственно данные. Полное имя выглядит так: tpch.sf1.orders.

Трёхуровневое имя таблицы
CatalogПодключение к источнику данных: какой коннектор и его настройки. Пример: tpch
точка
SchemaГруппа таблиц внутри каталога, обычно мапится на database или schema источника. Пример: sf1
точка
TableНабор строк в именованных типизированных столбцах. Пример: orders

Самые полезные системные каталоги для песочницы:

КаталогЧто даётЗачем в курсе
tpchСгенерированный на лету бенчмарк-датасет (заказы, клиенты, товары)Реалистичные данные любого объёма без загрузки
tpcdsБолее крупный и сложный бенчмарк-датасетСложные запросы, много таблиц, тесты оптимизатора
systemМетаданные самого Trino: запросы, узлы, каталогиНаблюдение за работой движка изнутри
jmxJMX-метрики Trino, представленные как таблицыМониторинг и наблюдаемость
memoryТаблицы, которые живут в оперативной памяти кластераБыстрые эксперименты с записью данных
blackholeПоглощает любые записи и не хранит ничегоТесты записи без побочных эффектов
fakerГенерация синтетических тестовых данныхУчебные датасеты с нужной структурой

Каталог tpch особенно удобен. Он не хранит данные — он генерирует их в момент запроса. Схема внутри него задаёт масштаб: sf1 — это scale factor 1, примерно гигабайт данных; tiny — крошечный набор для быстрых проверок; sf100 — сто гигабайт. Посмотрим, что внутри:

SHOW SCHEMAS FROM tpch;
       Schema
--------------------
 information_schema
 sf1
 sf100
 sf1000
 sf300
 sf3000
 sf30000
 tiny
(8 rows)
SHOW TABLES FROM tpch.tiny;
  Table
----------
 customer
 lineitem
 nation
 orders
 part
 partsupp
 region
 supplier
(8 rows)

Теперь можно выполнить настоящий аналитический запрос, не подключив ни одной внешней базы:

SELECT
    o.orderpriority,
    count(*)        AS orders,
    sum(o.totalprice) AS revenue
FROM tpch.tiny.orders o
GROUP BY o.orderpriority
ORDER BY revenue DESC;
  orderpriority  | orders |    revenue
-----------------+--------+----------------
 1-URGENT        |   3080 | 4.6258...E8
 2-HIGH          |   3006 | 4.5128...E8
 3-MEDIUM        |   2970 | 4.4790...E8
 4-NOT SPECIFIED |   3014 | 4.4524...E8
 5-LOW           |   3009 | 4.4291...E8
(5 rows)

Это полноценный OLAP-запрос — группировка и агрегация — и он отработал на данных, которых не существует на диске: tpch сгенерировал их прямо в процессе исполнения. На таких системных каталогах построены все ранние практики курса. Внешние источники — PostgreSQL, Iceberg на MinIO — мы подключим позже, в модулях про коннекторы, lakehouse и федерацию.

TIP

Полезные команды CLI для ориентации в песочнице: SHOW CATALOGS — список всех каталогов; SHOW SCHEMAS FROM <catalog> — схемы каталога; SHOW TABLES FROM <catalog>.<schema> — таблицы; DESCRIBE <catalog>.<schema>.<table> — столбцы и их типы. Выход из CLI — команда quit или сочетание Ctrl-D.

Что дальше с лабами

Для крупных лабораторных работ одного контейнера будет мало — там нужны несколько сервисов вместе: координатор и воркеры Trino, MinIO как S3-совместимое хранилище, метастор для Iceberg, иногда PostgreSQL. Всё это описывается одним файлом docker-compose.yml, который поднимает связку контейнеров одной командой docker compose up. Каждая лаба будет приходить со своим compose-файлом и инструкцией. Базовый навык — запуск контейнера и подключение CLI — у вас уже есть, и его достаточно, чтобы начать курс.

Docker Compose: зачем он нужен Docker: первый docker run

Попробуй сам

Поднимите Trino локально по шагам из урока: запустите контейнер, дождитесь строки SERVER STARTED, откройте http://localhost:8080 в браузере и убедитесь, что Web UI открывается.

Затем подключитесь через CLI (docker exec -it trino trino) и выполните серию команд: SELECT version();, SHOW CATALOGS;, SHOW SCHEMAS FROM tpch;, SHOW TABLES FROM tpch.tiny;, DESCRIBE tpch.tiny.customer;. Прочитайте, какие столбцы и типы у таблицы customer.

В завершение напишите свой первый аналитический запрос: посчитайте по таблице tpch.tiny.customer, сколько клиентов приходится на каждый сегмент рынка (столбец mktsegment), и отсортируйте результат по убыванию количества. Запустите тот же запрос на схеме tpch.sf1 вместо tpch.tiny и обратите внимание, что числа выросли — это тот же датасет в большем масштабе, сгенерированный на лету.


Проверка знанийKnowledge check
Зачем для практики курса использовать системные каталоги вроде tpch, и из каких трёх частей состоит полное имя таблицы в Trino?
ОтветAnswer
Trino не хранит данные сам — чтобы что-то запросить, нужен подключённый источник. Системные каталоги вроде tpch, tpcds, system, memory, faker встроены в Trino и работают сразу после старта, без подключения внешних баз. Это идеальная учебная песочница: на ней можно писать SQL, читать EXPLAIN, изучать движок, не поднимая PostgreSQL и не загружая файлы на S3. Каталог tpch особенно удобен тем, что не хранит данные на диске, а генерирует бенчмарк-датасет прямо в момент запроса; схема внутри него задаёт масштаб (tiny — крошечный набор, sf1 — около гигабайта, sf100 — сто гигабайт). Полное имя любой таблицы в Trino состоит из трёх частей через точку: catalog.schema.table. Catalog — это подключение к источнику (какой коннектор и его настройки); schema — группа таблиц внутри каталога, обычно соответствует database или schema источника; table — собственно набор строк в типизированных столбцах. Пример полного имени: tpch.tiny.orders.

Проверьте понимание

Результат: 0 из 0
Концептуальный
Вопрос 1 из 4. Из каких трёх частей состоит полное имя таблицы в Trino?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 3