Trino в Docker контейнере#

Проект Trino предоставляет стандартный Docker-образ trinodb/trino, который включает сервер Trino, все plugins и конфигурацию по умолчанию.

Дополнительный Docker-образ trinodb/trino-core содержит только минимальный набор основных plugins и поэтому в основном подходит как база для создания собственных контейнеров. Проект trino-packages включает модуль для создания кастомного Docker-образа с вашим собственным набором plugins.

Docker-образы публикуются в Docker Hub и могут использоваться с Docker runtime, а также с рядом других сред. Эти образы подходят для использования с Trino Helm chart.

Запуск контейнера#

Чтобы запустить Trino в Docker, необходимо, чтобы на вашей машине был установлен Docker engine. Вы можете скачать Docker с официального сайта Docker или использовать систему пакетов вашей операционной системы.

Используйте команду docker, чтобы создать контейнер из образа trinodb/trino. Назовите его trino, чтобы упростить дальнейшее обращение к нему. Запустите его в фоновом режиме и пробросьте порт Trino по умолчанию (8080) из контейнера на порт 8080 вашей рабочей станции.

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

Если не указывать тег образа контейнера, по умолчанию используется latest, однако можно использовать любую выпущенную версию Trino, например trinodb/trino:latest.

Выполните docker ps, чтобы увидеть все контейнеры, запущенные в фоновом режиме.

% docker ps
CONTAINER ID   IMAGE               COMMAND                  CREATED        STATUS                  PORTS                    NAMES
955c3b3d3d0a   trinodb/trino:390   "/usr/lib/trino/bin/…"   39 hours ago   Up 39 hours (healthy)   0.0.0.0:8080->8080/tcp   trino

Пока Trino запускается, отображается (health: starting), а когда он готов — (healthy).

Note

Существует несколько способов использования Trino в контейнерах. Вы можете запускать Trino локально в Docker-контейнерах, как описано в следующих разделах, или использовать платформу оркестрации контейнеров, такую как Kubernetes. Инструкции для Kubernetes см. в Trino на Kubernetes с Helm.

Выполнение запросов#

Образ включает клиент командной строки (CLI) Trino — trino. Запустите его в существующем контейнере, чтобы подключиться к серверу Trino, работающему внутри него. После запуска клиента введите и выполните запрос к таблице из каталога tpch, который содержит примерные данные:

$ docker exec -it trino trino
trino> select count(*) from tpch.sf1.nation;
 _col0
-------
    25
(1 row)

Query 20181105_001601_00002_e6r6y, FINISHED, 1 node
Splits: 21 total, 21 done (100.00%)
0:06 [25 rows, 0B] [4 rows/s, 0B/s]

Когда вы закончите работу, введите команду quit.

Альтернативно вы можете использовать Trino CLI, установленный непосредственно на вашей рабочей станции. URL сервера по умолчанию в CLI — http://localhost:8080 — соответствует порту, использованному в команде запуска контейнера. Более подробную информацию об использовании CLI можно найти в Интерфейс командной строки. Вы также можете подключиться с помощью любого другого клиентского приложения, используя Драйвер JDBC.

Настройка Trino#

Образ уже содержит конфигурацию по умолчанию для быстрого старта, а также некоторые каталоги, позволяющие изучить Trino. Вы также можете использовать контейнер со своими собственными конфигурационными файлами в локальной структуре директории etc, как описано в Развертывание Trino. Если при запуске контейнера смонтировать эту директорию как volume по пути /etc/trino, будет использоваться ваша конфигурация вместо стандартной, включённой в образ.

$ docker run --name trino -d -p 8080:8080 --volume $PWD/etc:/etc/trino trinodb/trino

Чтобы сохранить конфигурацию по умолчанию и настроить только каталоги, смонтируйте папку в /etc/trino/catalog или отдельные файлы свойств каталогов в эту директорию.

Если вы хотите использовать дополнительные plugins, смонтируйте их в /usr/lib/trino/plugin.

Чтобы не создавать файлы каталогов и не монтировать их в контейнер, вы можете включить динамическое управление каталогами, установив переменную окружения CATALOG_MANAGEMENT в значение dynamic.

$ docker run --name trino -d -p 8080:8080 -e CATALOG_MANAGEMENT=dynamic trinodb/trino

После подключения к Trino выполните инструкции Управление каталогами, чтобы создавать и удалять каталоги по необходимости. Чтобы сохранить эти изменения между перезапусками контейнера, необходимо смонтировать volume в /etc/trino/catalog.

Очистка#

Вы можете останавливать и запускать контейнер с помощью команд docker stop trino и docker start trino. Чтобы полностью удалить остановленный контейнер, выполните docker rm trino.