Развертывание Trino#
Требования#
Linux operating system#
требуется 64-битная версия
предпочтительно использовать более новую версию, особенно при запуске в контейнерах
достаточные ulimits для пользователя, который запускает процесс Trino. Эти лимиты могут зависеть от конкретного дистрибутива Linux, который вы используете. Количество открытых файловых дескрипторов, необходимых для конкретного экземпляра Trino, масштабируется примерно пропорционально количеству машин в кластере, умноженному на некоторый коэффициент, зависящий от рабочей нагрузки. Лимит
nofileзадаёт максимальное количество файловых дескрипторов, которые может иметь процесс, в то время как лимитnprocограничивает количество процессов, а следовательно и потоков в JVM, которые пользователь может создать. Мы рекомендуем устанавливать лимиты как минимум на следующие значения. Обычно эта конфигурация находится в/etc/security/limits.conf:trino soft nofile 131072 trino hard nofile 131072 trino soft nproc 128000 trino hard nproc 128000
Java runtime environment#
Trino требует 64-битную версию Java 24, с минимально необходимой версией 24.0.1 и рекомендацией использовать последнюю patch-версию. Более ранние версии, такие как Java 8, Java 11, Java 17, Java 21 или Java 23, не поддерживаются.
Более новые версии, такие как Java 25, также не поддерживаются — они могут работать, но не проходят тестирование.
Мы рекомендуем использовать дистрибутив Eclipse Temurin OpenJDK от Adoptium в качестве JDK для Trino, поскольку Trino тестируется именно с этим дистрибутивом. Eclipse Temurin также используется в Docker-образе Trino.
Установка Trino#
Скачайте tarball сервера Trino, trino-server-latest.tar.gz, и распакуйте его.
Tarball содержит одну директорию верхнего уровня — trino-server-latest,
которую мы называем installation directory.
Tarball по умолчанию содержит все plugins и должен быть настроен перед
использованием. Минимальный tarball server-core, trino-server-core-latest.tar.gz,
содержит минимальный набор основных plugins, поэтому он в основном подходит
как базовый вариант для создания собственного tarball.
Проект trino-packages включает модуль для создания полностью настроенного tarball с примером конфигурации. Созданный пользовательский tarball готов к использованию и может быть дополнительно настроен и адаптирован под ваши задачи.
Trino требуется data directory для хранения логов и других данных. По умолчанию установка из tarball использует одно и то же расположение для installation directory и data directory.
Мы рекомендуем создать data directory вне installation directory, что позволяет легко сохранить её при обновлении Trino. Путь к этой директории необходимо указать в конфигурации Node properties (Свойства узла).
Пользователь, от имени которого запускается процесс Trino, должен иметь полный доступ на чтение к installation directory, а также доступ на чтение и запись к data directory.
Настройка Trino#
Создайте директорию etc внутри installation directory.
В ней размещается следующая конфигурация:
Node Properties: параметры окружения, специфичные для каждого node
JVM Config: параметры командной строки для Java Virtual Machine
Config Properties: конфигурация сервера Trino. Доступные параметры конфигурации описаны в Справочник свойств.
Catalog Properties: конфигурация для Connectors (источников данных). Доступные параметры конфигурации catalog для connector описаны в документации соответствующего connector.
Node properties (Свойства узла)#
Файл node properties etc/node.properties содержит конфигурацию,
специфичную для каждого node. Node — это один установленный
экземпляр Trino на машине. Этот файл обычно создаётся системой
развертывания при первой установке Trino. Ниже приведён минимальный
пример etc/node.properties:
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir=/var/trino/data
Параметры, приведённые выше, описаны ниже:
node.environment: Имя окружения. Все nodes Trino в кластере должны иметь одинаковое имя окружения. Имя должно начинаться со строчного буквенно-цифрового символа и может содержать только строчные буквенно-цифровые символы или символ подчёркивания (_).node.id: Уникальный идентификатор для данной установки Trino. Он должен быть уникальным для каждого node. Этот идентификатор должен оставаться неизменным при перезагрузках или обновлениях Trino. Если на одной машине запускается несколько установок Trino (то есть несколько nodes на одной машине), каждая установка должна иметь уникальный идентификатор. Идентификатор должен начинаться с буквенно-цифрового символа и может содержать только буквенно-цифровые символы,-или_.node.data-dir: Расположение (путь в файловой системе) data directory. Trino хранит здесь логи и другие данные.
JVM config#
Файл конфигурации JVM etc/jvm.config содержит список параметров командной
строки, используемых для запуска Java Virtual Machine. Формат файла —
это список параметров, по одному на строку. Эти параметры не
интерпретируются оболочкой (shell), поэтому параметры, содержащие
пробелы или другие специальные символы, не должны заключаться в кавычки.
Ниже приведена хорошая отправная точка для создания etc/jvm.config:
-server
-Xmx16G
-XX:InitialRAMPercentage=80
-XX:MaxRAMPercentage=80
-XX:G1HeapRegionSize=32M
-XX:+ExplicitGCInvokesConcurrent
-XX:+ExitOnOutOfMemoryError
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-XX:ReservedCodeCacheSize=512M
-XX:PerMethodRecompilationCutoff=10000
-XX:PerBytecodeRecompilationCutoff=10000
-Djdk.attach.allowAttachSelf=true
-Djdk.nio.maxCachedBufferSize=2000000
Значение памяти, используемой Trino и задаваемое параметром -Xmx,
необходимо скорректировать в соответствии с доступным объёмом памяти
на ваших nodes. Обычно рекомендуется использовать значение,
составляющее 70–85 процентов от общего объёма доступной памяти.
Например, если все workers и coordinator используют nodes с 64GB RAM,
можно установить -Xmx54G.
Trino использует большую часть выделенной памяти для обработки данных, при этом небольшой процент используется внутренними процессами JVM, такими как garbage collection.
Оставшийся объём памяти node должен быть достаточным для операционной системы и других запущенных сервисов, а также для off-heap памяти, используемой нативным кодом, инициированным процессом JVM.
На более крупных nodes процент используемой памяти может быть ниже. Выделение всей памяти JVM или использование swap space не поддерживается, и рекомендуется отключить swap space на уровне операционной системы.
Для production-кластеров рекомендуется выделение объёма памяти более 32GB.
Поскольку OutOfMemoryError обычно оставляет JVM в
несогласованном состоянии, при его возникновении создаётся
heap dump для отладки, после чего процесс принудительно
завершается.
Temporary directory#
Временная директория, используемая JVM, должна разрешать выполнение кода, поскольку Trino обращается и использует бинарные файлы shared library для таких целей, как File compression and decompression.
В частности, раздел монтирования и директория не должны иметь установленный
флаг noexec. В некоторых установках операционных систем директория /tmp
по умолчанию монтируется с этим флагом, что предотвращает запуск Trino. Это
можно обойти, переопределив временную директорию, добавив
-Djava.io.tmpdir=/path/to/other/tmpdir в список JVM options.
Config properties#
Файл config properties etc/config.properties содержит конфигурацию
сервера Trino. Каждый сервер Trino может работать как в роли coordinator,
так и worker. Кластер должен включать один coordinator, и выделение
отдельной машины только для выполнения координирующей работы обеспечивает
лучшую производительность на больших кластерах. Масштабирование и
параллелизация достигаются за счёт использования множества workers.
Ниже приведена минимальная конфигурация для coordinator:
coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8080
discovery.uri=http://example.net:8080
А ниже приведена минимальная конфигурация для workers:
coordinator=false
http-server.http.port=8080
discovery.uri=http://example.net:8080
Альтернативно, если вы настраиваете одну машину для тестирования, которая выполняет роли и coordinator, и worker, используйте следующую конфигурацию:
coordinator=true
node-scheduler.include-coordinator=true
http-server.http.port=8080
discovery.uri=http://example.net:8080
Эти свойства требуют некоторых пояснений:
coordinator: Разрешает данному экземпляру Trino работать как coordinator, то есть принимать запросы от клиентов и управлять выполнением запросов.node-scheduler.include-coordinator: Разрешает планирование задач на coordinator. Для больших кластеров выполнение рабочих задач на coordinator может ухудшить производительность запросов, поскольку ресурсы машины становятся недоступны для критически важной задачи планирования, управления и мониторинга выполнения запросов.http-server.http.port: Указывает порт для HTTP server. Trino использует HTTP для всей коммуникации — как внутренней, так и внешней.discovery.uri: Coordinator Trino имеет сервис discovery, который используется всеми узлами для обнаружения друг друга. Каждый экземпляр Trino регистрируется в сервисе discovery при запуске и постоянно отправляет heartbeat, чтобы поддерживать свою регистрацию активной. Сервис discovery использует тот же HTTP server, что и Trino, и поэтому использует тот же порт. Заменитеexample.net:8080, чтобы указать хост и порт coordinator Trino. Если вы отключили HTTP на coordinator, схема URI должна бытьhttps, а неhttp.
Приведённые выше конфигурационные свойства являются минимальным набором, который поможет вам начать работу. Вся дополнительная конфигурация необязательна и может сильно различаться в зависимости от конкретного кластера и поддерживаемых сценариев использования. Разделы Администрирование и Security содержат документацию по многим аспектам, включая Resource groups для настройки политик очередей и Fault-tolerant execution.
Документ Справочник свойств содержит полный список поддерживаемых свойств для таких тем, как General properties, Resource management properties, Query management properties, Web UI properties и других.
Дополнительная конфигурация может включать Logging, Observability with OpenTelemetry, Мониторинг с использованием JMX, Trino metrics with OpenMetrics и другие функции, описанные в разделе Администрирование.
Catalog properties#
Trino получает доступ к данным в data source с помощью connector, который настраивается в catalog. Connector предоставляет все схемы и таблицы внутри каталога.
Например, Hive connector сопоставляет каждую базу данных Hive со схемой.
Если Hive connector настроен в каталоге example, и в Hive существует
таблица clicks в базе данных web, то к этой таблице можно обратиться
в Trino как example.web.clicks.
Каталоги регистрируются путём создания файла catalog properties
в директории etc/catalog.
Например, создайте etc/catalog/jmx.properties со следующим
содержимым, чтобы подключить jmx connector как каталог jmx:
connector.name=jmx
См. Connectors для получения дополнительной информации о настройке каталогов.
Running Trino#
Установка включает скрипт bin/launcher, который может использоваться
вручную или как скрипт запуска демона. Он принимает следующие команды:
Command |
Action |
|---|---|
|
Запускает сервер в foreground и оставляет его работающим. Чтобы остановить
сервер, используйте Ctrl+C в этом терминале или команду |
|
Запускает сервер как daemon и возвращает его process ID. |
|
Останавливает сервер, запущенный с помощью |
|
Останавливает, а затем перезапускает работающий сервер, либо запускает остановленный сервер, назначая новый process ID. |
|
Принудительно завершает возможно зависший сервер, отправляя сигнал SIGKILL. |
|
Выводит строку состояния: либо Stopped pid, либо Running as pid. |
Ряд дополнительных опций позволяет указать расположение файлов и директорий
конфигурации, а также параметры Java. Запустите launcher с --help,
чтобы увидеть поддерживаемые команды, параметры командной строки и
значения по умолчанию.
Опция -v или --verbose для каждой команды выводит текущие настройки
сервера перед обычным выводом команды.
Trino можно запустить как демон, выполнив следующую команду:
bin/launcher start
Используйте команду status с опцией verbose, чтобы увидеть pid и список параметров конфигурации:
bin/launcher -v status
Альтернативно сервер можно запустить в foreground, при этом логи и другой вывод будут записываться в stdout/stderr. Оба потока должны быть перехвачены при использовании системы супервизии, такой как daemontools:
bin/launcher run
Launcher настраивает значения по умолчанию для директории конфигурации etc,
файлов конфигурации в etc, data directory (совпадающей с installation
directory), pid-файла var/run/launcher.pid и лог-файлов в директории
var/log.
Вы можете изменить эти значения, чтобы адаптировать использование Trino под любые требования, например, использовать директорию вне installation directory, конкретные mount points или расположения, а также даже другие имена файлов. Например, Trino RPM изменяет используемые директории, чтобы лучше соответствовать стандарту Linux Filesystem Hierarchy Standard (FHS).
После запуска Trino вы можете найти лог-файлы в директории log внутри
data directory var:
launcher.log: Этот лог создаётся launcher и связан с потоками stdout и stderr сервера. Он содержит несколько сообщений, возникающих во время инициализации логирования сервера, а также любые ошибки или диагностическую информацию, создаваемую JVM.server.log: Это основной лог-файл Trino. Обычно он содержит релевантную информацию, если сервер завершился с ошибкой во время инициализации. Лог автоматически ротируется и сжимается.http-request.log: Это лог HTTP-запросов, который содержит каждый HTTP-запрос, полученный сервером. Он также автоматически ротируется и сжимается.