Управление отказоустойчивостью в Trino

По умолчанию, если на хосте Trino заканчиваются ресурсы при выполнении запроса или Trino worker выходит из строя по какой-то другой причине, текущий запрос завершается ошибкой и его необходимо перезапустить вручную. Как правило, чем дольше выполняется запрос, тем больше вероятность, что такой запрос приведет к ошибке.

Сервис Trino поддерживает отказоустойчивый режим работы (Fault-tolerant execution, FTE), который позволяет автоматически перезапускать запросы с ошибками или перезапускать отдельные их подзадачи (tasks). Если режим FTE включен и запрос падает с ошибкой, Trino сохраняет промежуточные данные в файловой системе. Используя эти промежуточные данные, другие компоненты Trino worker могут повторно запустить выполнение запроса.

NOTE
  • Поддержка режима FTE зависит от коннектора. Список коннекторов Trino, поддерживающих FTE, доступен в документации Trino.

  • Механизм FTE не применяется к некорректно составленным запросам или другим ошибкам пользователя. Например, Trino не будет повторно выполнять запрос, завершившийся с ошибкой из-за некорректного SQL-синтаксиса или несовместимых типов столбцов.

Активация 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, можно указать расположение, разрешения для директорий и так далее.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней