Управление отказоустойчивостью в Trino
По умолчанию, если на хосте Trino заканчиваются ресурсы при выполнении запроса или Trino worker выходит из строя по какой-то другой причине, текущий запрос завершается ошибкой и его необходимо перезапустить вручную. Как правило, чем дольше выполняется запрос, тем больше вероятность, что такой запрос приведет к ошибке.
Сервис Trino поддерживает отказоустойчивый режим работы (Fault-tolerant execution, FTE), который позволяет автоматически перезапускать запросы с ошибками или перезапускать отдельные их подзадачи (tasks). Если режим FTE включен и запрос падает с ошибкой, Trino сохраняет промежуточные данные в файловой системе. Используя эти промежуточные данные, другие компоненты Trino worker могут повторно запустить выполнение запроса.
NOTE
|
Активация FTE
По умолчанию режим FTE отключен для сервиса Trino. Активировать режим FTE можно с помощью ADCM (Clusters → <clusterName> → Services → Trino → Primary Configuration → Fault-tolerant execution). А именно, следует указать конфигурационный параметр retry-policy. Данный параметр принимает следующие значения:
-
NONE
— отключает режим FTE (значение по умолчанию). -
QUERY
— если Trino worker завершает выполнение запроса с ошибкой, Trino повторно выполняет весь запрос (query). Данная политика рекомендуется, когда большинство запросов Trino небольшие. -
TASK
— если Trino worker завершает выполнение запроса с ошибкой, Trino повторно выполняет отдельные задачи (tasks). Данный режим оптимален для больших пакетных запросов, однако может привести к повышенной задержке при большом количестве маленьких запросов.ПРИМЕЧАНИЕВыбор политикиTASK
автоматически обновляет некоторые релевантные параметры конфигурации для обеспечения наилучшей отказоустойчивости кластера Trino. При выборе политикиTASK
настоятельно рекомендуется установить параметрtask.low-memory-killer.policy=total-reservation-on-blocked-nodes
. В противном случае при дефиците памяти на хостах с Trino worker может потребоваться ручное завершение запросов.
Exchange manager и данные обмена
Trino Exchange manager — это модуль, отвечающий за передачу данных обмена (exchange data) между хостами Trino worker при выполнении распределенного запроса. Если FTE включен, этот компонент также отвечает за буферизацию (spooling) данных обмена в файловой системе, например HDFS, Ozone или в локальной файловой системе. При активации FTE необходимо выбрать подходящую реализацию Exchange manager для записи промежуточных данных в нужную файловую систему.
Настройки FTE
Сервис Trino предоставляет несколько групп настроек в ADCM, которые используются для настройки поведения FTE. К ним относятся:
-
Fault-tolerant execution. Используя эти настройки, можно определить поведение для повторных запусков запросов, включая политики, интервалы, параметры шифрования и так далее.
-
Exchange manager. В этих настройках регулируются параметры промежуточных данных, которые генерирует Exchange manager (тип хранилища, пути, разрешения, размер буфера и так далее).
Буферизация в HDFS, Ozone и в локальной FS
По умолчанию сервис Trino предоставляет две реализации Exchange manager, которые могут сохранять промежуточные данные обмена в HDFS, Ozone, а также в локальной файловой системе.
При включении режима FTE сервис Trino автоматически определяет, какой тип хранилища используется в ADH-кластере (HDFS или Ozone) и обновляет все необходимые настройки для работы с данным типом хранилища.
Для записи данных обмена в HDFS установите параметр exchange-manager.name=hdfs
и укажите путь для хранения данных с помощью exchange.base-directories
, используя схему hdfs:///
.
Чтобы сохранять данные обмена в Ozone, установите параметр exchange-manager.name=hdfs
и укажите путь к хранилищу, используя схему ofs:///
.
ПРИМЕЧАНИЕ
Одновременное использование путей HDFS и Ozone в поле exchange.base-directories недопустимо.
|
Чтобы сохранять данные обмена в локальной файловой системе, установите параметр exchange-manager.name=local
и укажите путь для хранения данных с помощью параметра exchange.base-directories
(используйте схему file:///
).
Сервис Trino может автоматически создавать директории для хранения промежуточных данных. Используя настройки FTE, можно указать расположение, разрешения для директорий и так далее.