Управление ресурсными группами в Managed Service for Trino
В Managed Service for Trino вы можете управлять конфигурацией ресурсных групп:
- получить информацию о текущей конфигурации,
- задать конфигурацию при создании кластера,
- задать или изменить конфигурацию для существующего кластера,
- удалить конфигурацию.
Получить информацию о конфигурации ресурсных групп
- В консоли управления
перейдите в нужный каталог. - Перейдите в сервис Managed Service for Trino.
- Нажмите на имя нужного кластера.
- Перейдите в блок Управление ресурсами.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.
Чтобы получить описание ресурсных групп и правил маршрутизации в кластере Managed Service for Trino, выполните команду:
yc managed-trino cluster get-resource-groups <имя_или_идентификатор_кластера>
Идентификатор и имя кластера можно запросить со списком кластеров в каталоге.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Воспользуйтесь методом Cluster.Get и выполните запрос, например, с помощью cURL
:curl \ --request GET \ --header "Authorization: Bearer $IAM_TOKEN" \ --url 'https://trino.api.cloud.yandex.net/managed-trino/v1/clusters/<идентификатор_кластера>'Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
Описание ресурсных групп и правил маршрутизации в кластере Managed Service for Trino содержится в ответе сервера в поле
resourceGroups.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Воспользуйтесь вызовом ClusterService.Get и выполните запрос, например с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/trino/v1/cluster_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d '{ "cluster_id": "<идентификатор_кластера>" }' \ trino.api.cloud.yandex.net:443 \ yandex.cloud.trino.v1.ClusterService.GetИдентификатор кластера можно запросить со списком кластеров в каталоге.
-
Описание ресурсных групп и правил маршрутизации в кластере Managed Service for Trino содержится в ответе сервера в поле
resource_groups.
Задать конфигурацию ресурсных групп при создании кластера
-
В консоли управления
выберите каталог, в котором нужно создать кластер Managed Service for Trino. -
Перейдите в сервис Managed Service for Trino.
-
Нажмите кнопку Создать кластер и задайте параметры кластера.
-
Перейдите в блок Управление ресурсами.
-
В поле CPU quota period задайте период расчета квоты CPU для ресурсных групп.
-
Нажмите кнопку Добавить группу и задайте параметры ресурсной группы:
-
(Опционально) Выберите родительскую группу.
-
Задайте имя ресурсной группы.
Имя группы может представлять собой шаблон, использующий подстановки переменных в формате
${<имя_переменной>}. Имя-шаблон может содержать следующие виды переменных:- Встроенные:
USER— имя пользователя,SOURCE— источник запроса. - Пользовательские: объявляются в параметрах правил маршрутизации Пользователь и Источник.
При маршрутизации запросов Managed Service for Trino будет создавать экземпляры группы с динамически сформированными именами.
- Встроенные:
-
В поле Max queued задайте максимальное число запросов в очереди (должно быть больше
1). При достижении этого лимита новые запросы будут отклонены с ошибкой. -
(Опционально) В поле Soft concurrency limit задайте мягкий лимит на число запущенных запросов. При достижении этого лимита новые запросы будут запускаться в группе, только если соседние группы не могут принимать запросы или превысили свои мягкие лимиты. В противном случае новые запросы будут поставлены в очередь.
-
В поле Hard concurrency limit задайте максимальное число запущенных запросов (должно быть больше
1). При достижении этого лимита новые запросы будут поставлены в очередь. -
(Опционально) В поле Soft memory limit, % задайте максимальный процент доступной памяти, который может использоваться группой. При достижении этого лимита новые запросы будут поставлены в очередь.
-
(Опционально) В поле Soft CPU limit задайте мягкий лимит процессорного времени. При достижении этого лимита максимальное число запущенных запросов будет снижено до окончания текущего периода расчета квоты CPU. Не может быть больше, чем Hard CPU limit. Чтобы задать Soft CPU limit, нужно также задать CPU quota period.
-
(Опционально) В поле Hard CPU limit задайте жесткий лимит процессорного времени. При достижении этого лимита новые запросы будут поставлены в очередь. Чтобы задать Hard CPU limit, нужно также задать CPU quota period.
-
(Опционально) В поле Scheduling policy задайте политику планирования запросов. Возможные значения:
fair,weighted,weighted_fair,query_priority. Значение по умолчанию —none(действует политикаfair). -
(Опционально) В поле Scheduling weight задайте вес группы, используемый в политиках планирования
weightedиweighted_fair.
Подробнее о дереве групп в разделе Ресурсные группы в Managed Service for Trino.
-
-
(Опционально) Добавьте другие ресурсные группы аналогичным образом.
-
Нажмите кнопку Добавить правило и задайте параметры правила:
-
(Опционально) В поле Пользователь задайте имя пользователя, отправившего запрос, или регулярное выражение Java. Правило срабатывает, если имя пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов от любых пользователей.
-
(Опционально) В поле Группа задайте имя группы пользователя, отправившего запрос, или регулярное выражение Java. Правило срабатывает, если имя группы пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов пользователей любых групп.
-
(Опционально) В поле Тип запроса выберите тип запроса. Возможные значения:
SELECT— запросыSELECT.EXPLAIN— запросыEXPLAIN, кромеEXPLAIN ANALYZE.DESCRIBE— запросыDESCRIBE,DESCRIBE INPUTиDESCRIBE OUTPUT, а также запросыSHOW(например,SHOW CATALOGSилиSHOW SCHEMAS).INSERT— запросыINSERT,CREATE TABLE ASиREFRESH MATERIALIZED VIEW.MERGE— запросыMERGE.DELETE— запросыDELETE.ANALYZE— запросыANALYZE.DATA_DEFINITION— запросыCREATE,ALTERиDROPдля схем, таблиц, представлений и материализованных представлений, а также запросы управления подготовленными выражениями, правами доступа, сессиями и транзакциями.ALTER_TABLE_EXECUTE— запросы видаALTER TABLE ... EXECUTE.
-
(Опционально) В поле Источник задайте имя источника запроса или регулярное выражение Java. Правило срабатывает, если имя источника запроса соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов из любых источников.
-
В поле Ресурсная группа выберите ресурсную группу, в которой будет запущен запрос. Целевая группа не может иметь дочерних групп.
-
(Опционально) В поле Теги укажите теги через запятую. Правило срабатывает, только если запрос содержит все указанные теги. Если параметр не указан, правило срабатывает для запросов с любыми тегами.
Важно
Запрос, не соответствующий ни одному заданному правилу, отклоняется с ошибкой. Чтобы этого не происходило, добавьте в конец описания правило без ограничивающих условий, содержащее только параметр Ресурсная группа.
Подробнее о правилах маршрутизации в разделе Ресурсные группы в Managed Service for Trino.
-
-
(Опционально) Добавьте другие правила маршрутизации аналогичным образом.
-
Нажмите кнопку Создать.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.
Чтобы задать конфигурацию ресурсных групп:
-
Создайте файл с описанием ресурсных групп и правил маршрутизации в формате JSON или YAML. Ниже представлен пример YAML-файла
resource-groups.yaml.rootGroups: # Корневая ресурсная группа 1 - name: "<имя_ресурсной_группы>" softMemoryLimit: "<лимит_использования_памяти>" softConcurrencyLimit: <мягкий_лимит_числа_запущенных_запросов> hardConcurrencyLimit: <жесткий_лимит_числа_запущенных_запросов> softCpuLimit: <мягкий_лимит_процессорного_времени> hardCpuLimit: <жесткий_лимит_процессорного_времени> maxQueued: <лимит_числа_запросов_в_очереди> schedulingPolicy: "<политика_планирования_запросов>" schedulingWeight: <вес_группы> subGroups: # Дочерняя ресурсная группа 1 - name: "<имя_ресурсной_группы>" ... subGroups: [<список_дочерних_групп_следующих_уровней>] # Дочерняя ресурсная группа 2 - name: "<имя_ресурсной_группы>" ... subGroups: [<список_дочерних_групп_следующих_уровней>] ... # Дочерняя ресурсная группа N - name: "<имя_ресурсной_группы>" ... subGroups: [<список_дочерних_групп_следующих_уровней>] # Корневая ресурсная группа 2 - name: "<имя_ресурсной_группы_2>" ... # Корневая ресурсная группа N - name: "<имя_ресурсной_группы_N>" ... selectors: # Правило маршрутизации 1 - user: "<регулярное_выражение_для_имен_пользователей>" userGroup: "<регулярное_выражение_для_групп_пользователей>" queryType: "<тип_запроса>" source: "<регулярное_выражение_для_источников_запросов>" clientTags: ["<список_тегов>"] group: "<имя_ресурсной_группы>" # Правило маршрутизации 2 - ... ... # Правило маршрутизации N - ... cpuQuotaPeriod: "<период_расчета_квоты_CPU>"Где:
-
rootGroups— описание дерева ресурсных групп. Параметрыname,hardConcurrencyLimitиmaxQueuedявляются обязательными.-
name— имя группы.Имя группы может представлять собой шаблон, использующий подстановки переменных в формате
${<имя_переменной>}. Имя-шаблон может содержать следующие виды переменных:- Встроенные:
USER— имя пользователя,SOURCE— источник запроса. - Пользовательские: объявляются в параметрах правил маршрутизации
user,userGroupиsource.
При маршрутизации запросов Managed Service for Trino будет создавать экземпляры группы с динамически сформированными именами.
- Встроенные:
-
softMemoryLimit— максимальный объем доступной памяти, который может использоваться группой. При достижении этого лимита новые запросы будут поставлены в очередь. ЗначениеsoftMemoryLimitможет задаваться одним из способов:- В процентах от общего объема доступной памяти, например
10%. - Как абсолютное значение объема памяти, например
1GB. Можно использовать один из следующих суффиксов:B,kB,MB,GB,TB,PB.
- В процентах от общего объема доступной памяти, например
-
softConcurrencyLimit— мягкий лимит на число запущенных запросов. При достижении этого лимита новые запросы будут запускаться в группе, только если соседние группы не могут принимать запросы или превысили свои мягкие лимиты. В противном случае новые запросы будут поставлены в очередь. -
hardConcurrencyLimit— максимальное число запущенных запросов. При достижении этого лимита новые запросы будут поставлены в очередь. -
softCpuLimit— мягкий лимит процессорного времени. При достижении этого лимита значениеhardConcurrencyLimitбудет снижено до окончания текущего периода расчета квоты CPU. ЗначениеsoftCpuLimitне может быть больше, чемhardCpuLimit. -
hardCpuLimit— жесткий лимит процессорного времени. При достижении этого лимита новые запросы будут поставлены в очередь.
Примечание
Если задан хотя бы один из параметров —
softCpuLimitилиhardCpuLimit, задайте также параметрcpuQuotaPeriod.-
maxQueued— максимальное число запросов в очереди. При достижении этого лимита новые запросы будут отклонены с ошибкой. -
schedulingPolicy— политика планирования запросов. Возможные значения:FAIRWEIGHTEDWEIGHTED_FAIRQUERY_PRIORITY
Если параметр не указан, действует политика
FAIR. -
schedulingWeight— вес группы, используемый в политиках планированияWEIGHTEDиWEIGHTED_FAIR.Если параметр не указан, вес группы равен
1. -
subGroups— описания дочерних групп.
-
-
selectors— описание правил маршрутизации. Параметрgroupявляется обязательным.-
user— имя пользователя, отправившего запрос, или регулярное выражение Java. Правило срабатывает, если имя пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов любых пользователей. -
userGroup— имя группы пользователя, отправившего запрос, или регулярное выражение Java для групп пользователей. Правило срабатывает, если имя группы пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов пользователей любых групп. -
queryType— тип запроса. Возможные значения:SELECT— запросыSELECT.EXPLAIN— запросыEXPLAIN, кромеEXPLAIN ANALYZE.DESCRIBE— запросыDESCRIBE,DESCRIBE INPUTиDESCRIBE OUTPUT, а также запросыSHOW(например,SHOW CATALOGSилиSHOW SCHEMAS).INSERT— запросыINSERT,CREATE TABLE ASиREFRESH MATERIALIZED VIEW.MERGE— запросыMERGE.DELETE— запросыDELETE.ANALYZE— запросыANALYZE.DATA_DEFINITION— запросыCREATE,ALTERиDROPдля схем, таблиц, представлений и материализованных представлений, а также запросы управления подготовленными выражениями, правами доступа, сессиями и транзакциями.ALTER_TABLE_EXECUTE— запросы видаALTER TABLE ... EXECUTE.
-
source— имя источника запроса или регулярное выражение Java. Правило срабатывает, если имя источника запроса соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов из любых источников. -
clientTags— список тегов. Правило срабатывает, только если запрос содержит все указанные теги. Если параметр не указан, правило срабатывает для запросов с любыми тегами. -
group— полное имя целевой ресурсной группы. Включает имена всех ее родительских групп, разделенных точками, начиная с корневой группы. В имени группы могут использоваться подстановки переменных в формате${<имя_переменной>}. Целевая группа не может иметь дочерних групп.
Важно
Запрос, не соответствующий ни одному заданному правилу, отклоняется с ошибкой. Чтобы этого не происходило, добавьте в конец описания правило без ограничивающих условий, содержащее только параметр
group. -
-
cpuQuotaPeriod— период расчета квоты CPU для ресурсных групп. Задается как целое число секунд, минут или часов, например140s,30mили1h.
Подробнее о дереве групп и правилах маршрутизации в разделе Ресурсные группы в Managed Service for Trino.
-
-
Посмотрите описание команды CLI для создания кластера:
yc managed-trino cluster create --help -
Выполните команду:
yc managed-trino cluster create \ ... --resource-groups-from-file resource-groups.yamlДоступные параметры кластера и их описания см. в инструкции.
-
Создайте конфигурационный файл Terraform с планом инфраструктуры.
-
Добавьте в описание кластера блок
resource_groups:resource_groups = jsonencode( { "rootGroups" : [ # Корневая ресурсная группа 1 { "name" : "<имя_ресурсной_группы>", "softMemoryLimit" : "<лимит_использования_памяти>", "softConcurrencyLimit" : <мягкий_лимит_числа_запущенных_запросов>, "hardConcurrencyLimit" : <жесткий_лимит_числа_запущенных_запросов>, "softCpuLimit" : <мягкий_лимит_процессорного_времени>, "hardCpuLimit" : <жесткий_лимит_процессорного_времени>, "maxQueued" : <лимит_числа_запросов_в_очереди>, "schedulingPolicy" : "<политика_планирования_запросов>", "schedulingWeight" : <вес_группы>, "subGroups" : [ # Дочерняя ресурсная группа 1 { ... "subGroups" : [<список_дочерних_групп_следующих уровней>] }, # Дочерняя ресурсная группа 2 { ... "subGroups" : [<список_дочерних_групп_следующих уровней>] }, ... # Дочерняя ресурсная группа N { ... "subGroups" : [<список_дочерних_групп_следующих уровней>] } ] }, # Корневая ресурсная группа 2 { ... }, ... # Корневая ресурсная группа N { ... } ], "selectors" : [ # Правило маршрутизации 1 { "user" : "<регулярное_выражение_для_имен_пользователей>", "userGroup" : "<регулярное_выражение_для_групп_пользователей>", "queryType" : "<тип_запроса>", "source" : "<регулярное_выражение_для_источников_запросов>", "clientTags" : ["<список_тегов>"], "group" : "<имя_ресурсной_группы>" }, # Правило маршрутизации 2 { ... }, ... # Правило маршрутизации N { ... } ], "cpuQuotaPeriod" : "<период_расчета_квоты_CPU>" } )Где:
-
rootGroups— описание дерева ресурсных групп. Параметрыname,hardConcurrencyLimitиmaxQueuedявляются обязательными.-
name— имя группы.Имя группы может представлять собой шаблон, использующий подстановки переменных в формате
${<имя_переменной>}. Имя-шаблон может содержать следующие виды переменных:- Встроенные:
USER— имя пользователя,SOURCE— источник запроса. - Пользовательские: объявляются в параметрах правил маршрутизации
user,userGroupиsource.
При маршрутизации запросов Managed Service for Trino будет создавать экземпляры группы с динамически сформированными именами.
- Встроенные:
-
softMemoryLimit— максимальный объем доступной памяти, который может использоваться группой. При достижении этого лимита новые запросы будут поставлены в очередь. ЗначениеsoftMemoryLimitможет задаваться одним из способов:- В процентах от общего объема доступной памяти, например
10%. - Как абсолютное значение объема памяти, например
1GB. Можно использовать один из следующих суффиксов:B,kB,MB,GB,TB,PB.
- В процентах от общего объема доступной памяти, например
-
softConcurrencyLimit— мягкий лимит на число запущенных запросов. При достижении этого лимита новые запросы будут запускаться в группе, только если соседние группы не могут принимать запросы или превысили свои мягкие лимиты. В противном случае новые запросы будут поставлены в очередь. -
hardConcurrencyLimit— максимальное число запущенных запросов. При достижении этого лимита новые запросы будут поставлены в очередь. -
softCpuLimit— мягкий лимит процессорного времени. При достижении этого лимита значениеhardConcurrencyLimitбудет снижено до окончания текущего периода расчета квоты CPU. ЗначениеsoftCpuLimitне может быть больше, чемhardCpuLimit. -
hardCpuLimit— жесткий лимит процессорного времени. При достижении этого лимита новые запросы будут поставлены в очередь.
Примечание
Если задан хотя бы один из параметров —
softCpuLimitилиhardCpuLimit, задайте также параметрcpuQuotaPeriod.-
maxQueued— максимальное число запросов в очереди. При достижении этого лимита новые запросы будут отклонены с ошибкой. -
schedulingPolicy— политика планирования запросов. Возможные значения:FAIRWEIGHTEDWEIGHTED_FAIRQUERY_PRIORITY
Если параметр не указан, действует политика
FAIR. -
schedulingWeight— вес группы, используемый в политиках планированияWEIGHTEDиWEIGHTED_FAIR.Если параметр не указан, вес группы равен
1. -
subGroups— описания дочерних групп.
-
-
selectors— описание правил маршрутизации. Параметрgroupявляется обязательным.-
user— имя пользователя, отправившего запрос, или регулярное выражение Java. Правило срабатывает, если имя пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов любых пользователей. -
userGroup— имя группы пользователя, отправившего запрос, или регулярное выражение Java для групп пользователей. Правило срабатывает, если имя группы пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов пользователей любых групп. -
queryType— тип запроса. Возможные значения:SELECT— запросыSELECT.EXPLAIN— запросыEXPLAIN, кромеEXPLAIN ANALYZE.DESCRIBE— запросыDESCRIBE,DESCRIBE INPUTиDESCRIBE OUTPUT, а также запросыSHOW(например,SHOW CATALOGSилиSHOW SCHEMAS).INSERT— запросыINSERT,CREATE TABLE ASиREFRESH MATERIALIZED VIEW.MERGE— запросыMERGE.DELETE— запросыDELETE.ANALYZE— запросыANALYZE.DATA_DEFINITION— запросыCREATE,ALTERиDROPдля схем, таблиц, представлений и материализованных представлений, а также запросы управления подготовленными выражениями, правами доступа, сессиями и транзакциями.ALTER_TABLE_EXECUTE— запросы видаALTER TABLE ... EXECUTE.
-
source— имя источника запроса или регулярное выражение Java. Правило срабатывает, если имя источника запроса соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов из любых источников. -
clientTags— список тегов. Правило срабатывает, только если запрос содержит все указанные теги. Если параметр не указан, правило срабатывает для запросов с любыми тегами. -
group— полное имя целевой ресурсной группы. Включает имена всех ее родительских групп, разделенных точками, начиная с корневой группы. В имени группы могут использоваться подстановки переменных в формате${<имя_переменной>}. Целевая группа не может иметь дочерних групп.
Важно
Запрос, не соответствующий ни одному заданному правилу, отклоняется с ошибкой. Чтобы этого не происходило, добавьте в конец описания правило без ограничивающих условий, содержащее только параметр
group. -
-
cpuQuotaPeriod— период расчета квоты CPU для ресурсных групп. Задается как целое число секунд, минут или часов, например140s,30mили1h.
Подробнее о дереве групп и правилах маршрутизации в разделе Ресурсные группы в Managed Service for Trino.
Примечание
Вы также можете создать отдельный JSON-файл с описанием ресурсных групп и правил маршрутизации и передать его в параметре
resource_groupsследующим образом:resource_groups = file("resource-groups.json") -
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Подробнее см. в документации провайдера Terraform.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Создайте файл
body.jsonи добавьте в него следующее содержимое:{ <Параметры_кластера> ... "trino": { ... "resourceManagement": { "resourceGroups": { "rootGroups": [ { "name" : "<имя_ресурсной_группы>", "softMemoryLimit" : "<лимит_использования_памяти>", "softConcurrencyLimit" : "<мягкий_лимит_числа_запущенных_запросов>", "hardConcurrencyLimit" : "<жесткий_лимит_числа_запущенных_запросов>", "softCpuLimit" : "<мягкий_лимит_процессорного_времени>", "hardCpuLimit" : "<жесткий_лимит_процессорного_времени>", "maxQueued" : "<лимит_числа_запросов_в_очереди>", "schedulingPolicy" : "<политика_планирования_запросов>", "schedulingWeight" : "<вес_группы>", "subGroups": [ { <Дочерняя_ресурсная_группа_1> ... "subGroups" : [<список_дочерних_групп_следующих уровней>] }, { <Дочерняя_ресурсная_группа_2> ... "subGroups" : [<список_дочерних_групп_следующих уровней>] }, ... { <Дочерняя_ресурсная_группа_N> ... "subGroups" : [<список_дочерних_групп_следующих уровней>] } ] }, { <Корневая_ресурсная_группа_2> }, ... { <Корневая_ресурсная_группа_N> } ], "selectors": [ { "user": "<регулярное_выражение_для_имен_пользователей>", "userGroup": "<регулярное_выражение_для_групп_пользователей>", "queryType": "<тип_запроса>", "source": "<регулярное_выражение_для_источников_запросов>", "clientTags": ["<список_тегов>"], "group": "<имя_ресурсной_группы>" }, { <Правило_маршрутизации_2> }, ... { <Правило_маршрутизации_N> } ], "cpuQuotaPeriod": "<период_расчета_квоты_CPU>" } ... }, } }Где:
-
rootGroups— описание дерева ресурсных групп. Параметрыname,hardConcurrencyLimitиmaxQueuedявляются обязательными.-
name— имя группы.Имя группы может представлять собой шаблон, использующий подстановки переменных в формате
${<имя_переменной>}. Имя-шаблон может содержать следующие виды переменных:- Встроенные:
USER— имя пользователя,SOURCE— источник запроса. - Пользовательские: объявляются в параметрах правил маршрутизации
user,userGroupиsource.
При маршрутизации запросов Managed Service for Trino будет создавать экземпляры группы с динамически сформированными именами.
- Встроенные:
-
softMemoryLimit— максимальный объем доступной памяти, который может использоваться группой. При достижении этого лимита новые запросы будут поставлены в очередь. ЗначениеsoftMemoryLimitможет задаваться одним из способов:- В процентах от общего объема доступной памяти, например
10%. - Как абсолютное значение объема памяти, например
1GB. Можно использовать один из следующих суффиксов:B,kB,MB,GB,TB,PB.
- В процентах от общего объема доступной памяти, например
-
softConcurrencyLimit— мягкий лимит на число запущенных запросов. При достижении этого лимита новые запросы будут запускаться в группе, только если соседние группы не могут принимать запросы или превысили свои мягкие лимиты. В противном случае новые запросы будут поставлены в очередь. -
hardConcurrencyLimit— максимальное число запущенных запросов. При достижении этого лимита новые запросы будут поставлены в очередь. -
softCpuLimit— мягкий лимит процессорного времени. При достижении этого лимита значениеhardConcurrencyLimitбудет снижено до окончания текущего периода расчета квоты CPU. ЗначениеsoftCpuLimitне может быть больше, чемhardCpuLimit. -
hardCpuLimit— жесткий лимит процессорного времени. При достижении этого лимита новые запросы будут поставлены в очередь.
Примечание
Если задан хотя бы один из параметров —
softCpuLimitилиhardCpuLimit, задайте также параметрcpuQuotaPeriod.-
maxQueued— максимальное число запросов в очереди. При достижении этого лимита новые запросы будут отклонены с ошибкой. -
schedulingPolicy— политика планирования запросов. Возможные значения:FAIRWEIGHTEDWEIGHTED_FAIRQUERY_PRIORITY
Если параметр не указан, действует политика
FAIR. -
schedulingWeight— вес группы, используемый в политиках планированияWEIGHTEDиWEIGHTED_FAIR.Если параметр не указан, вес группы равен
1. -
subGroups— описания дочерних групп.
-
-
selectors— описание правил маршрутизации. Параметрgroupявляется обязательным.-
user— имя пользователя, отправившего запрос, или регулярное выражение Java. Правило срабатывает, если имя пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов любых пользователей. -
userGroup— имя группы пользователя, отправившего запрос, или регулярное выражение Java для групп пользователей. Правило срабатывает, если имя группы пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов пользователей любых групп. -
queryType— тип запроса. Возможные значения:SELECT— запросыSELECT.EXPLAIN— запросыEXPLAIN, кромеEXPLAIN ANALYZE.DESCRIBE— запросыDESCRIBE,DESCRIBE INPUTиDESCRIBE OUTPUT, а также запросыSHOW(например,SHOW CATALOGSилиSHOW SCHEMAS).INSERT— запросыINSERT,CREATE TABLE ASиREFRESH MATERIALIZED VIEW.MERGE— запросыMERGE.DELETE— запросыDELETE.ANALYZE— запросыANALYZE.DATA_DEFINITION— запросыCREATE,ALTERиDROPдля схем, таблиц, представлений и материализованных представлений, а также запросы управления подготовленными выражениями, правами доступа, сессиями и транзакциями.ALTER_TABLE_EXECUTE— запросы видаALTER TABLE ... EXECUTE.
-
source— имя источника запроса или регулярное выражение Java. Правило срабатывает, если имя источника запроса соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов из любых источников. -
clientTags— список тегов. Правило срабатывает, только если запрос содержит все указанные теги. Если параметр не указан, правило срабатывает для запросов с любыми тегами. -
group— полное имя целевой ресурсной группы. Включает имена всех ее родительских групп, разделенных точками, начиная с корневой группы. В имени группы могут использоваться подстановки переменных в формате${<имя_переменной>}. Целевая группа не может иметь дочерних групп.
Важно
Запрос, не соответствующий ни одному заданному правилу, отклоняется с ошибкой. Чтобы этого не происходило, добавьте в конец описания правило без ограничивающих условий, содержащее только параметр
group. -
-
cpuQuotaPeriod— период расчета квоты CPU для ресурсных групп. Задается как целое число секунд, минут или часов, например140s,30mили1h.
Подробнее о дереве групп и правилах маршрутизации в разделе Ресурсные группы в Managed Service for Trino.
-
-
Воспользуйтесь методом Cluster.Create и выполните запрос, например с помощью cURL
:curl \ --request POST \ --header "Authorization: Bearer $IAM_TOKEN" \ --url 'https://trino.api.cloud.yandex.net/managed-trino/v1/clusters' --data '@body.json' -
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Создайте файл
body.jsonи добавьте в него следующее содержимое:{ <Параметры_кластера> ... "trino": { ... "resource_management": { "resource_groups": { "root_groups": [ { "name" : "<имя_ресурсной_группы>", "soft_memory_limit" : "<лимит_использования_памяти>", "soft_concurrency_limit" : "<мягкий_лимит_числа_запущенных_запросов>", "hard_concurrency_limit" : "<жесткий_лимит_числа_запущенных_запросов>", "soft_cpu_limit" : "<мягкий_лимит_процессорного_времени>", "hard_cpu_limit" : "<жесткий_лимит_процессорного_времени>", "max_queued" : "<лимит_числа_запросов_в_очереди>", "scheduling_policy" : "<политика_планирования_запросов>", "scheduling_weight" : "<вес_группы>", "sub_groups": [ { <Дочерняя_ресурсная_группа_1> ... "sub_groups" : [<список_дочерних_групп_следующих уровней>] }, { <Дочерняя_ресурсная_группа_2> ... "sub_groups" : [<список_дочерних_групп_следующих уровней>] }, ... { <Дочерняя_ресурсная_группа_N> ... "sub_groups" : [<список_дочерних_групп_следующих уровней>] } ] }, { <Корневая_ресурсная_группа_2> }, ... { <Корневая_ресурсная_группа_N> } ], "selectors": [ { "user": "<регулярное_выражение_для_имен_пользователей>", "user_group": "<регулярное_выражение_для_групп_пользователей>", "query_type": "<тип_запроса>", "source": "<регулярное_выражение_для_источников_запросов>", "client_tags": ["<список_тегов>"], "group": "<имя_ресурсной_группы>" }, { <Правило_маршрутизации_2> }, ... { <Правило_маршрутизации_N> } ], "cpu_quota_period": "<период_расчета_квоты_CPU>" } ... }, } }Где:
-
root_groups— описание дерева ресурсных групп. Параметрыname,hard_concurrency_limitиmax_queuedявляются обязательными.-
name— имя группы.Имя группы может представлять собой шаблон, использующий подстановки переменных в формате
${<имя_переменной>}. Имя-шаблон может содержать следующие виды переменных:- Встроенные:
USER— имя пользователя,SOURCE— источник запроса. - Пользовательские: объявляются в параметрах правил маршрутизации
user,user_groupиsource.
При маршрутизации запросов Managed Service for Trino будет создавать экземпляры группы с динамически сформированными именами.
- Встроенные:
-
soft_memory_limit— максимальный объем доступной памяти, который может использоваться группой. При достижении этого лимита новые запросы будут поставлены в очередь. Значениеsoft_memory_limitможет задаваться одним из способов:- В процентах от общего объема доступной памяти, например
10%. - Как абсолютное значение объема памяти, например
1GB. Можно использовать один из следующих суффиксов:B,kB,MB,GB,TB,PB.
- В процентах от общего объема доступной памяти, например
-
soft_concurrency_limit— мягкий лимит на число запущенных запросов. При достижении этого лимита новые запросы будут запускаться в группе, только если соседние группы не могут принимать запросы или превысили свои мягкие лимиты. В противном случае новые запросы будут поставлены в очередь. -
hard_concurrency_limit— максимальное число запущенных запросов. При достижении этого лимита новые запросы будут поставлены в очередь. -
soft_cpu_limit— мягкий лимит процессорного времени. При достижении этого лимита значениеhard_concurrency_limitбудет снижено до окончания текущего периода расчета квоты CPU. Значениеsoft_cpu_limitне может быть больше, чемhard_cpu_limit. -
hard_cpu_limit— жесткий лимит процессорного времени. При достижении этого лимита новые запросы будут поставлены в очередь.
Примечание
Если задан хотя бы один из параметров —
soft_cpu_limitилиhard_cpu_limit, задайте также параметрcpu_quota_period.-
max_queued— максимальное число запросов в очереди. При достижении этого лимита новые запросы будут отклонены с ошибкой. -
scheduling_policy— политика планирования запросов. Возможные значения:FAIRWEIGHTEDWEIGHTED_FAIRQUERY_PRIORITY
Если параметр не указан, действует политика
FAIR. -
scheduling_weight— вес группы, используемый в политиках планированияWEIGHTEDиWEIGHTED_FAIR.Если параметр не указан, вес группы равен
1. -
sub_groups— описания дочерних групп.
-
-
selectors— описание правил маршрутизации. Параметрgroupявляется обязательным.-
user— имя пользователя, отправившего запрос, или регулярное выражение Java. Правило срабатывает, если имя пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов любых пользователей. -
user_group— имя группы пользователя, отправившего запрос, или регулярное выражение Java для групп пользователей. Правило срабатывает, если имя группы пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов пользователей любых групп. -
query_type— тип запроса. Возможные значения:SELECT— запросыSELECT.EXPLAIN— запросыEXPLAIN, кромеEXPLAIN ANALYZE.DESCRIBE— запросыDESCRIBE,DESCRIBE INPUTиDESCRIBE OUTPUT, а также запросыSHOW(например,SHOW CATALOGSилиSHOW SCHEMAS).INSERT— запросыINSERT,CREATE TABLE ASиREFRESH MATERIALIZED VIEW.MERGE— запросыMERGE.DELETE— запросыDELETE.ANALYZE— запросыANALYZE.DATA_DEFINITION— запросыCREATE,ALTERиDROPдля схем, таблиц, представлений и материализованных представлений, а также запросы управления подготовленными выражениями, правами доступа, сессиями и транзакциями.ALTER_TABLE_EXECUTE— запросы видаALTER TABLE ... EXECUTE.
-
source— имя источника запроса или регулярное выражение Java. Правило срабатывает, если имя источника запроса соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов из любых источников. -
client_tags— список тегов. Правило срабатывает, только если запрос содержит все указанные теги. Если параметр не указан, правило срабатывает для запросов с любыми тегами. -
group— полное имя целевой ресурсной группы. Включает имена всех ее родительских групп, разделенных точками, начиная с корневой группы. В имени группы могут использоваться подстановки переменных в формате${<имя_переменной>}. Целевая группа не может иметь дочерних групп.
Важно
Запрос, не соответствующий ни одному заданному правилу, отклоняется с ошибкой. Чтобы этого не происходило, добавьте в конец описания правило без ограничивающих условий, содержащее только параметр
group. -
-
cpu_quota_period— период расчета квоты CPU для ресурсных групп. Задается как целое число секунд, минут или часов, например140s,30mили1h.
Подробнее о дереве групп и правилах маршрутизации в разделе Ресурсные группы в Managed Service for Trino.
Доступные параметры кластера и их описания см. в инструкции.
-
-
Воспользуйтесь вызовом ClusterService.Create и выполните запрос, например с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/trino/v1/cluster_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d @ \ trino.api.cloud.yandex.net:443 \ yandex.cloud.trino.v1.ClusterService.Create \ < body.json -
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Задать или изменить конфигурацию ресурсных групп кластера
-
В консоли управления
перейдите в нужный каталог. -
Перейдите в сервис Managed Service for Trino.
-
Нажмите на имя нужного кластера.
-
Перейдите в блок Управление ресурсами.
-
В поле CPU quota period задайте новое значение периода расчета квоты CPU для ресурсных групп.
-
Чтобы добавить новую ресурсную группу, нажмите кнопку Добавить группу и задайте параметры группы:
-
(Опционально) Выберите родительскую группу.
-
Задайте имя ресурсной группы.
Имя группы может представлять собой шаблон, использующий подстановки переменных в формате
${<имя_переменной>}. Имя-шаблон может содержать следующие виды переменных:- Встроенные:
USER— имя пользователя,SOURCE— источник запроса. - Пользовательские: объявляются в параметрах правил маршрутизации Пользователь и Источник.
При маршрутизации запросов Managed Service for Trino будет создавать экземпляры группы с динамически сформированными именами.
- Встроенные:
-
В поле Max queued задайте максимальное число запросов в очереди (должно быть больше
1). При достижении этого лимита новые запросы будут отклонены с ошибкой. -
(Опционально) В поле Soft concurrency limit задайте мягкий лимит на число запущенных запросов. При достижении этого лимита новые запросы будут запускаться в группе, только если соседние группы не могут принимать запросы или превысили свои мягкие лимиты. В противном случае новые запросы будут поставлены в очередь.
-
В поле Hard concurrency limit задайте максимальное число запущенных запросов (должно быть больше
1). При достижении этого лимита новые запросы будут поставлены в очередь. -
(Опционально) В поле Soft memory limit, % задайте максимальный процент доступной памяти, который может использоваться группой. При достижении этого лимита новые запросы будут поставлены в очередь.
-
(Опционально) В поле Soft CPU limit задайте мягкий лимит процессорного времени. При достижении этого лимита максимальное число запущенных запросов будет снижено до окончания текущего периода расчета квоты CPU. Не может быть больше, чем Hard CPU limit. Чтобы задать Soft CPU limit, нужно также задать CPU quota period.
-
(Опционально) В поле Hard CPU limit задайте жесткий лимит процессорного времени. При достижении этого лимита новые запросы будут поставлены в очередь. Чтобы задать Hard CPU limit, нужно также задать CPU quota period.
-
(Опционально) В поле Scheduling policy задайте политику планирования запросов. Возможные значения:
fair,weighted,weighted_fair,query_priority. Значение по умолчанию —none(действует политикаfair). -
(Опционально) В поле Scheduling weight задайте вес группы, используемый в политиках планирования
weightedиweighted_fair.
Подробнее о дереве групп в разделе Ресурсные группы в Managed Service for Trino.
-
-
(Опционально) Добавьте другие ресурсные группы аналогичным образом.
-
Чтобы отредактировать ресурсную группу:
- В строке этой группы нажмите на значок
. - Измените параметры группы и нажмите кнопку Редактировать.
- В строке этой группы нажмите на значок
-
Чтобы добавить новое правило маршрутизации, нажмите кнопку Добавить правило и задайте параметры правила:
-
(Опционально) В поле Пользователь задайте имя пользователя, отправившего запрос, или регулярное выражение Java. Правило срабатывает, если имя пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов от любых пользователей.
-
(Опционально) В поле Группа задайте имя группы пользователя, отправившего запрос, или регулярное выражение Java. Правило срабатывает, если имя группы пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов пользователей любых групп.
-
(Опционально) В поле Тип запроса выберите тип запроса. Возможные значения:
SELECT— запросыSELECT.EXPLAIN— запросыEXPLAIN, кромеEXPLAIN ANALYZE.DESCRIBE— запросыDESCRIBE,DESCRIBE INPUTиDESCRIBE OUTPUT, а также запросыSHOW(например,SHOW CATALOGSилиSHOW SCHEMAS).INSERT— запросыINSERT,CREATE TABLE ASиREFRESH MATERIALIZED VIEW.MERGE— запросыMERGE.DELETE— запросыDELETE.ANALYZE— запросыANALYZE.DATA_DEFINITION— запросыCREATE,ALTERиDROPдля схем, таблиц, представлений и материализованных представлений, а также запросы управления подготовленными выражениями, правами доступа, сессиями и транзакциями.ALTER_TABLE_EXECUTE— запросы видаALTER TABLE ... EXECUTE.
-
(Опционально) В поле Источник задайте имя источника запроса или регулярное выражение Java. Правило срабатывает, если имя источника запроса соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов из любых источников.
-
В поле Ресурсная группа выберите ресурсную группу, в которой будет запущен запрос. Целевая группа не может иметь дочерних групп.
-
(Опционально) В поле Теги укажите теги через запятую. Правило срабатывает, только если запрос содержит все указанные теги. Если параметр не указан, правило срабатывает для запросов с любыми тегами.
Важно
Запрос, не соответствующий ни одному заданному правилу, отклоняется с ошибкой. Чтобы этого не происходило, добавьте в конец описания правило без ограничивающих условий, содержащее только параметр Ресурсная группа.
Подробнее о правилах маршрутизации в разделе Ресурсные группы в Managed Service for Trino.
-
-
(Опционально) Добавьте другие правила маршрутизации аналогичным образом.
-
Чтобы отредактировать правило маршрутизации:
- В строке этого правила нажмите на значок
. - Измените параметры правила.
- В строке этого правила нажмите на значок
-
Нажмите кнопку Сохранить изменения.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.
Чтобы задать конфигурацию ресурсных групп:
-
Если описание ресурсных групп и правил маршрутизации в кластере Managed Service for Trino еще не задано, создайте файл с описанием в формате JSON или YAML. Ниже представлен пример YAML-файла
resource-groups.yaml.rootGroups: # Корневая ресурсная группа 1 - name: "<имя_ресурсной_группы>" softMemoryLimit: "<лимит_использования_памяти>" softConcurrencyLimit: <мягкий_лимит_числа_запущенных_запросов> hardConcurrencyLimit: <жесткий_лимит_числа_запущенных_запросов> softCpuLimit: <мягкий_лимит_процессорного_времени> hardCpuLimit: <жесткий_лимит_процессорного_времени> maxQueued: <лимит_числа_запросов_в_очереди> schedulingPolicy: "<политика_планирования_запросов>" schedulingWeight: <вес_группы> subGroups: # Дочерняя ресурсная группа 1 - name: "<имя_ресурсной_группы>" ... subGroups: [<список_дочерних_групп_следующих_уровней>] # Дочерняя ресурсная группа 2 - name: "<имя_ресурсной_группы>" ... subGroups: [<список_дочерних_групп_следующих_уровней>] ... # Дочерняя ресурсная группа N - name: "<имя_ресурсной_группы>" ... subGroups: [<список_дочерних_групп_следующих_уровней>] # Корневая ресурсная группа 2 - name: "<имя_ресурсной_группы_2>" ... # Корневая ресурсная группа N - name: "<имя_ресурсной_группы_N>" ... selectors: # Правило маршрутизации 1 - user: "<регулярное_выражение_для_имен_пользователей>" userGroup: "<регулярное_выражение_для_групп_пользователей>" queryType: "<тип_запроса>" source: "<регулярное_выражение_для_источников_запросов>" clientTags: ["<список_тегов>"] group: "<имя_ресурсной_группы>" # Правило маршрутизации 2 - ... ... # Правило маршрутизации N - ... cpuQuotaPeriod: "<период_расчета_квоты_CPU>"Где:
-
rootGroups— описание дерева ресурсных групп. Параметрыname,hardConcurrencyLimitиmaxQueuedявляются обязательными.-
name— имя группы.Имя группы может представлять собой шаблон, использующий подстановки переменных в формате
${<имя_переменной>}. Имя-шаблон может содержать следующие виды переменных:- Встроенные:
USER— имя пользователя,SOURCE— источник запроса. - Пользовательские: объявляются в параметрах правил маршрутизации
user,userGroupиsource.
При маршрутизации запросов Managed Service for Trino будет создавать экземпляры группы с динамически сформированными именами.
- Встроенные:
-
softMemoryLimit— максимальный объем доступной памяти, который может использоваться группой. При достижении этого лимита новые запросы будут поставлены в очередь. ЗначениеsoftMemoryLimitможет задаваться одним из способов:- В процентах от общего объема доступной памяти, например
10%. - Как абсолютное значение объема памяти, например
1GB. Можно использовать один из следующих суффиксов:B,kB,MB,GB,TB,PB.
- В процентах от общего объема доступной памяти, например
-
softConcurrencyLimit— мягкий лимит на число запущенных запросов. При достижении этого лимита новые запросы будут запускаться в группе, только если соседние группы не могут принимать запросы или превысили свои мягкие лимиты. В противном случае новые запросы будут поставлены в очередь. -
hardConcurrencyLimit— максимальное число запущенных запросов. При достижении этого лимита новые запросы будут поставлены в очередь. -
softCpuLimit— мягкий лимит процессорного времени. При достижении этого лимита значениеhardConcurrencyLimitбудет снижено до окончания текущего периода расчета квоты CPU. ЗначениеsoftCpuLimitне может быть больше, чемhardCpuLimit. -
hardCpuLimit— жесткий лимит процессорного времени. При достижении этого лимита новые запросы будут поставлены в очередь.
Примечание
Если задан хотя бы один из параметров —
softCpuLimitилиhardCpuLimit, задайте также параметрcpuQuotaPeriod.-
maxQueued— максимальное число запросов в очереди. При достижении этого лимита новые запросы будут отклонены с ошибкой. -
schedulingPolicy— политика планирования запросов. Возможные значения:FAIRWEIGHTEDWEIGHTED_FAIRQUERY_PRIORITY
Если параметр не указан, действует политика
FAIR. -
schedulingWeight— вес группы, используемый в политиках планированияWEIGHTEDиWEIGHTED_FAIR.Если параметр не указан, вес группы равен
1. -
subGroups— описания дочерних групп.
-
-
selectors— описание правил маршрутизации. Параметрgroupявляется обязательным.-
user— имя пользователя, отправившего запрос, или регулярное выражение Java. Правило срабатывает, если имя пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов любых пользователей. -
userGroup— имя группы пользователя, отправившего запрос, или регулярное выражение Java для групп пользователей. Правило срабатывает, если имя группы пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов пользователей любых групп. -
queryType— тип запроса. Возможные значения:SELECT— запросыSELECT.EXPLAIN— запросыEXPLAIN, кромеEXPLAIN ANALYZE.DESCRIBE— запросыDESCRIBE,DESCRIBE INPUTиDESCRIBE OUTPUT, а также запросыSHOW(например,SHOW CATALOGSилиSHOW SCHEMAS).INSERT— запросыINSERT,CREATE TABLE ASиREFRESH MATERIALIZED VIEW.MERGE— запросыMERGE.DELETE— запросыDELETE.ANALYZE— запросыANALYZE.DATA_DEFINITION— запросыCREATE,ALTERиDROPдля схем, таблиц, представлений и материализованных представлений, а также запросы управления подготовленными выражениями, правами доступа, сессиями и транзакциями.ALTER_TABLE_EXECUTE— запросы видаALTER TABLE ... EXECUTE.
-
source— имя источника запроса или регулярное выражение Java. Правило срабатывает, если имя источника запроса соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов из любых источников. -
clientTags— список тегов. Правило срабатывает, только если запрос содержит все указанные теги. Если параметр не указан, правило срабатывает для запросов с любыми тегами. -
group— полное имя целевой ресурсной группы. Включает имена всех ее родительских групп, разделенных точками, начиная с корневой группы. В имени группы могут использоваться подстановки переменных в формате${<имя_переменной>}. Целевая группа не может иметь дочерних групп.
Важно
Запрос, не соответствующий ни одному заданному правилу, отклоняется с ошибкой. Чтобы этого не происходило, добавьте в конец описания правило без ограничивающих условий, содержащее только параметр
group. -
-
cpuQuotaPeriod— период расчета квоты CPU для ресурсных групп. Задается как целое число секунд, минут или часов, например140s,30mили1h.
Подробнее о дереве групп и правилах маршрутизации в разделе Ресурсные группы в Managed Service for Trino.
-
-
Если описание ресурсных групп и правил маршрутизации уже задано, откройте файл
resource-groups.yamlи внесите в него изменения. Вы можете:- добавить новые ресурсные группы и правила маршрутизации;
- изменить параметры существующих групп и правил;
- удалить ненужные группы и правила.
-
Выполните команду:
yc managed-trino cluster set-resource-groups <имя_или_идентификатор_кластера> \
--from-file resource-groups.yaml
Имя и идентификатор кластера можно получить со списком кластеров в каталоге.
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера.
-
Если описание ресурсных групп и правил маршрутизации в кластере Managed Service for Trino еще не задано, добавьте в описание кластера блок
resource_groups:resource_groups = jsonencode( { "rootGroups" : [ # Корневая ресурсная группа 1 { "name" : "<имя_ресурсной_группы>", "softMemoryLimit" : "<лимит_использования_памяти>", "softConcurrencyLimit" : <мягкий_лимит_числа_запущенных_запросов>, "hardConcurrencyLimit" : <жесткий_лимит_числа_запущенных_запросов>, "softCpuLimit" : <мягкий_лимит_процессорного_времени>, "hardCpuLimit" : <жесткий_лимит_процессорного_времени>, "maxQueued" : <лимит_числа_запросов_в_очереди>, "schedulingPolicy" : "<политика_планирования_запросов>", "schedulingWeight" : <вес_группы>, "subGroups" : [ # Дочерняя ресурсная группа 1 { ... "subGroups" : [<список_дочерних_групп_следующих уровней>] }, # Дочерняя ресурсная группа 2 { ... "subGroups" : [<список_дочерних_групп_следующих уровней>] }, ... # Дочерняя ресурсная группа N { ... "subGroups" : [<список_дочерних_групп_следующих уровней>] } ] }, # Корневая ресурсная группа 2 { ... }, ... # Корневая ресурсная группа N { ... } ], "selectors" : [ # Правило маршрутизации 1 { "user" : "<регулярное_выражение_для_имен_пользователей>", "userGroup" : "<регулярное_выражение_для_групп_пользователей>", "queryType" : "<тип_запроса>", "source" : "<регулярное_выражение_для_источников_запросов>", "clientTags" : ["<список_тегов>"], "group" : "<имя_ресурсной_группы>" }, # Правило маршрутизации 2 { ... }, ... # Правило маршрутизации N { ... } ], "cpuQuotaPeriod" : "<период_расчета_квоты_CPU>" } )Где:
-
rootGroups— описание дерева ресурсных групп. Параметрыname,hardConcurrencyLimitиmaxQueuedявляются обязательными.-
name— имя группы.Имя группы может представлять собой шаблон, использующий подстановки переменных в формате
${<имя_переменной>}. Имя-шаблон может содержать следующие виды переменных:- Встроенные:
USER— имя пользователя,SOURCE— источник запроса. - Пользовательские: объявляются в параметрах правил маршрутизации
user,userGroupиsource.
При маршрутизации запросов Managed Service for Trino будет создавать экземпляры группы с динамически сформированными именами.
- Встроенные:
-
softMemoryLimit— максимальный объем доступной памяти, который может использоваться группой. При достижении этого лимита новые запросы будут поставлены в очередь. ЗначениеsoftMemoryLimitможет задаваться одним из способов:- В процентах от общего объема доступной памяти, например
10%. - Как абсолютное значение объема памяти, например
1GB. Можно использовать один из следующих суффиксов:B,kB,MB,GB,TB,PB.
- В процентах от общего объема доступной памяти, например
-
softConcurrencyLimit— мягкий лимит на число запущенных запросов. При достижении этого лимита новые запросы будут запускаться в группе, только если соседние группы не могут принимать запросы или превысили свои мягкие лимиты. В противном случае новые запросы будут поставлены в очередь. -
hardConcurrencyLimit— максимальное число запущенных запросов. При достижении этого лимита новые запросы будут поставлены в очередь. -
softCpuLimit— мягкий лимит процессорного времени. При достижении этого лимита значениеhardConcurrencyLimitбудет снижено до окончания текущего периода расчета квоты CPU. ЗначениеsoftCpuLimitне может быть больше, чемhardCpuLimit. -
hardCpuLimit— жесткий лимит процессорного времени. При достижении этого лимита новые запросы будут поставлены в очередь.
Примечание
Если задан хотя бы один из параметров —
softCpuLimitилиhardCpuLimit, задайте также параметрcpuQuotaPeriod.-
maxQueued— максимальное число запросов в очереди. При достижении этого лимита новые запросы будут отклонены с ошибкой. -
schedulingPolicy— политика планирования запросов. Возможные значения:FAIRWEIGHTEDWEIGHTED_FAIRQUERY_PRIORITY
Если параметр не указан, действует политика
FAIR. -
schedulingWeight— вес группы, используемый в политиках планированияWEIGHTEDиWEIGHTED_FAIR.Если параметр не указан, вес группы равен
1. -
subGroups— описания дочерних групп.
-
-
selectors— описание правил маршрутизации. Параметрgroupявляется обязательным.-
user— имя пользователя, отправившего запрос, или регулярное выражение Java. Правило срабатывает, если имя пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов любых пользователей. -
userGroup— имя группы пользователя, отправившего запрос, или регулярное выражение Java для групп пользователей. Правило срабатывает, если имя группы пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов пользователей любых групп. -
queryType— тип запроса. Возможные значения:SELECT— запросыSELECT.EXPLAIN— запросыEXPLAIN, кромеEXPLAIN ANALYZE.DESCRIBE— запросыDESCRIBE,DESCRIBE INPUTиDESCRIBE OUTPUT, а также запросыSHOW(например,SHOW CATALOGSилиSHOW SCHEMAS).INSERT— запросыINSERT,CREATE TABLE ASиREFRESH MATERIALIZED VIEW.MERGE— запросыMERGE.DELETE— запросыDELETE.ANALYZE— запросыANALYZE.DATA_DEFINITION— запросыCREATE,ALTERиDROPдля схем, таблиц, представлений и материализованных представлений, а также запросы управления подготовленными выражениями, правами доступа, сессиями и транзакциями.ALTER_TABLE_EXECUTE— запросы видаALTER TABLE ... EXECUTE.
-
source— имя источника запроса или регулярное выражение Java. Правило срабатывает, если имя источника запроса соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов из любых источников. -
clientTags— список тегов. Правило срабатывает, только если запрос содержит все указанные теги. Если параметр не указан, правило срабатывает для запросов с любыми тегами. -
group— полное имя целевой ресурсной группы. Включает имена всех ее родительских групп, разделенных точками, начиная с корневой группы. В имени группы могут использоваться подстановки переменных в формате${<имя_переменной>}. Целевая группа не может иметь дочерних групп.
Важно
Запрос, не соответствующий ни одному заданному правилу, отклоняется с ошибкой. Чтобы этого не происходило, добавьте в конец описания правило без ограничивающих условий, содержащее только параметр
group. -
-
cpuQuotaPeriod— период расчета квоты CPU для ресурсных групп. Задается как целое число секунд, минут или часов, например140s,30mили1h.
Подробнее о дереве групп и правилах маршрутизации в разделе Ресурсные группы в Managed Service for Trino.
Примечание
Вы также можете создать отдельный JSON-файл с описанием ресурсных групп и правил маршрутизации и передать его в параметре
resource_groupsследующим образом:resource_groups = file("resource-groups.json") -
-
Если описание ресурсных групп и правил маршрутизации уже задано, внесите правки в блок
resource_groupsили JSON-файл. Вы можете:- добавить новые ресурсные группы и правила маршрутизации;
- изменить параметры существующих групп и правил;
- удалить ненужные группы и правила.
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Подробнее см. в документации провайдера Terraform.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Создайте файл
body.jsonи добавьте в него следующее содержимое:{ "updateMask": "<список_изменяемых_параметров>", "trino": { "resourceManagement": { "resourceGroups": { "rootGroups": [ { "name" : "<имя_ресурсной_группы>", "softMemoryLimit" : "<лимит_использования_памяти>", "softConcurrencyLimit" : "<мягкий_лимит_числа_запущенных_запросов>", "hardConcurrencyLimit" : "<жесткий_лимит_числа_запущенных_запросов>", "softCpuLimit" : "<мягкий_лимит_процессорного_времени>", "hardCpuLimit" : "<жесткий_лимит_процессорного_времени>", "maxQueued" : "<лимит_числа_запросов_в_очереди>", "schedulingPolicy" : "<политика_планирования_запросов>", "schedulingWeight" : "<вес_группы>", "subGroups": [ { <Дочерняя_ресурсная_группа_1> ... "subGroups" : [<список_дочерних_групп_следующих уровней>] }, { <Дочерняя_ресурсная_группа_2> ... "subGroups" : [<список_дочерних_групп_следующих уровней>] }, ... { <Дочерняя_ресурсная_группа_N> ... "subGroups" : [<список_дочерних_групп_следующих уровней>] } ] }, { <Корневая_ресурсная_группа_2> }, ... { <Корневая_ресурсная_группа_N> } ], "selectors": [ { "user": "<регулярное_выражение_для_имен_пользователей>", "userGroup": "<регулярное_выражение_для_групп_пользователей>", "queryType": "<тип_запроса>", "source": "<регулярное_выражение_для_источников_запросов>", "clientTags": ["<список_тегов>"], "group": "<имя_ресурсной_группы>" }, { <Правило_маршрутизации_2> }, ... { <Правило_маршрутизации_N> } ], "cpuQuotaPeriod": "<период_расчета_квоты_CPU>" } ... }, } }Где:
-
updateMask— перечень изменяемых параметров в строку через запятую.Важно
При изменении кластера все параметры изменяемого объекта, которые не были явно переданы в запросе, будут переопределены на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
updateMask.
-
rootGroups— описание дерева ресурсных групп. Параметрыname,hardConcurrencyLimitиmaxQueuedявляются обязательными.-
name— имя группы.Имя группы может представлять собой шаблон, использующий подстановки переменных в формате
${<имя_переменной>}. Имя-шаблон может содержать следующие виды переменных:- Встроенные:
USER— имя пользователя,SOURCE— источник запроса. - Пользовательские: объявляются в параметрах правил маршрутизации
user,userGroupиsource.
При маршрутизации запросов Managed Service for Trino будет создавать экземпляры группы с динамически сформированными именами.
- Встроенные:
-
softMemoryLimit— максимальный объем доступной памяти, который может использоваться группой. При достижении этого лимита новые запросы будут поставлены в очередь. ЗначениеsoftMemoryLimitможет задаваться одним из способов:- В процентах от общего объема доступной памяти, например
10%. - Как абсолютное значение объема памяти, например
1GB. Можно использовать один из следующих суффиксов:B,kB,MB,GB,TB,PB.
- В процентах от общего объема доступной памяти, например
-
softConcurrencyLimit— мягкий лимит на число запущенных запросов. При достижении этого лимита новые запросы будут запускаться в группе, только если соседние группы не могут принимать запросы или превысили свои мягкие лимиты. В противном случае новые запросы будут поставлены в очередь. -
hardConcurrencyLimit— максимальное число запущенных запросов. При достижении этого лимита новые запросы будут поставлены в очередь. -
softCpuLimit— мягкий лимит процессорного времени. При достижении этого лимита значениеhardConcurrencyLimitбудет снижено до окончания текущего периода расчета квоты CPU. ЗначениеsoftCpuLimitне может быть больше, чемhardCpuLimit. -
hardCpuLimit— жесткий лимит процессорного времени. При достижении этого лимита новые запросы будут поставлены в очередь.
Примечание
Если задан хотя бы один из параметров —
softCpuLimitилиhardCpuLimit, задайте также параметрcpuQuotaPeriod.-
maxQueued— максимальное число запросов в очереди. При достижении этого лимита новые запросы будут отклонены с ошибкой. -
schedulingPolicy— политика планирования запросов. Возможные значения:FAIRWEIGHTEDWEIGHTED_FAIRQUERY_PRIORITY
Если параметр не указан, действует политика
FAIR. -
schedulingWeight— вес группы, используемый в политиках планированияWEIGHTEDиWEIGHTED_FAIR.Если параметр не указан, вес группы равен
1. -
subGroups— описания дочерних групп.
-
-
selectors— описание правил маршрутизации. Параметрgroupявляется обязательным.-
user— имя пользователя, отправившего запрос, или регулярное выражение Java. Правило срабатывает, если имя пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов любых пользователей. -
userGroup— имя группы пользователя, отправившего запрос, или регулярное выражение Java для групп пользователей. Правило срабатывает, если имя группы пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов пользователей любых групп. -
queryType— тип запроса. Возможные значения:SELECT— запросыSELECT.EXPLAIN— запросыEXPLAIN, кромеEXPLAIN ANALYZE.DESCRIBE— запросыDESCRIBE,DESCRIBE INPUTиDESCRIBE OUTPUT, а также запросыSHOW(например,SHOW CATALOGSилиSHOW SCHEMAS).INSERT— запросыINSERT,CREATE TABLE ASиREFRESH MATERIALIZED VIEW.MERGE— запросыMERGE.DELETE— запросыDELETE.ANALYZE— запросыANALYZE.DATA_DEFINITION— запросыCREATE,ALTERиDROPдля схем, таблиц, представлений и материализованных представлений, а также запросы управления подготовленными выражениями, правами доступа, сессиями и транзакциями.ALTER_TABLE_EXECUTE— запросы видаALTER TABLE ... EXECUTE.
-
source— имя источника запроса или регулярное выражение Java. Правило срабатывает, если имя источника запроса соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов из любых источников. -
clientTags— список тегов. Правило срабатывает, только если запрос содержит все указанные теги. Если параметр не указан, правило срабатывает для запросов с любыми тегами. -
group— полное имя целевой ресурсной группы. Включает имена всех ее родительских групп, разделенных точками, начиная с корневой группы. В имени группы могут использоваться подстановки переменных в формате${<имя_переменной>}. Целевая группа не может иметь дочерних групп.
Важно
Запрос, не соответствующий ни одному заданному правилу, отклоняется с ошибкой. Чтобы этого не происходило, добавьте в конец описания правило без ограничивающих условий, содержащее только параметр
group. -
-
cpuQuotaPeriod— период расчета квоты CPU для ресурсных групп. Задается как целое число секунд, минут или часов, например140s,30mили1h.
Подробнее о дереве групп и правилах маршрутизации в разделе Ресурсные группы в Managed Service for Trino.
-
-
Воспользуйтесь методом Cluster.Update и выполните запрос, например с помощью cURL
:curl \ --request PATCH \ --header "Authorization: Bearer $IAM_TOKEN" \ --url 'https://trino.api.cloud.yandex.net/managed-trino/v1/clusters/<идентификатор_кластера>' --data '@body.json'Идентификатор кластера можно получить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Создайте файл
body.jsonи добавьте в него следующее содержимое:{ "cluster_id": "<идентификатор_кластера>", "update_mask": { "paths": [ <список_изменяемых_параметров> ] }, "trino": { "resource_management": { "resource_groups": { "root_groups": [ { "name" : "<имя_ресурсной_группы>", "soft_memory_limit" : "<лимит_использования_памяти>", "soft_concurrency_limit" : "<мягкий_лимит_числа_запущенных_запросов>", "hard_concurrency_limit" : "<жесткий_лимит_числа_запущенных_запросов>", "soft_cpu_limit" : "<мягкий_лимит_процессорного_времени>", "hard_cpu_limit" : "<жесткий_лимит_процессорного_времени>", "max_queued" : "<лимит_числа_запросов_в_очереди>", "scheduling_policy" : "<политика_планирования_запросов>", "scheduling_weight" : "<вес_группы>", "sub_groups": [ { <Дочерняя_ресурсная_группа_1> ... "sub_groups" : [<список_дочерних_групп_следующих уровней>] }, { <Дочерняя_ресурсная_группа_2> ... "sub_groups" : [<список_дочерних_групп_следующих уровней>] }, ... { <Дочерняя_ресурсная_группа_N> ... "sub_groups" : [<список_дочерних_групп_следующих уровней>] } ] }, { <Корневая_ресурсная_группа_2> }, ... { <Корневая_ресурсная_группа_N> } ], "selectors": [ { "user": "<регулярное_выражение_для_имен_пользователей>", "user_group": "<регулярное_выражение_для_групп_пользователей>", "query_type": "<тип_запроса>", "source": "<регулярное_выражение_для_источников_запросов>", "client_tags": ["<список_тегов>"], "group": "<имя_ресурсной_группы>" }, { <Правило_маршрутизации_2> }, ... { <Правило_маршрутизации_N> } ], "cpu_quota_period": "<период_расчета_квоты_CPU>" } ... }, } }Где:
-
cluster_id— идентификатор кластера.Идентификатор кластера можно получить со списком кластеров в каталоге.
-
update_mask— перечень изменяемых параметров в виде массива строкpaths[]."update_mask": { "paths": [ "<настройка_1>", "<настройка_2>", ... "<настройка_N>" ] }Важно
При изменении кластера все параметры изменяемого объекта, которые не были явно переданы в запросе, будут переопределены на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
update_mask.
-
root_groups— описание дерева ресурсных групп. Параметрыname,hard_concurrency_limitиmax_queuedявляются обязательными.-
name— имя группы.Имя группы может представлять собой шаблон, использующий подстановки переменных в формате
${<имя_переменной>}. Имя-шаблон может содержать следующие виды переменных:- Встроенные:
USER— имя пользователя,SOURCE— источник запроса. - Пользовательские: объявляются в параметрах правил маршрутизации
user,user_groupиsource.
При маршрутизации запросов Managed Service for Trino будет создавать экземпляры группы с динамически сформированными именами.
- Встроенные:
-
soft_memory_limit— максимальный объем доступной памяти, который может использоваться группой. При достижении этого лимита новые запросы будут поставлены в очередь. Значениеsoft_memory_limitможет задаваться одним из способов:- В процентах от общего объема доступной памяти, например
10%. - Как абсолютное значение объема памяти, например
1GB. Можно использовать один из следующих суффиксов:B,kB,MB,GB,TB,PB.
- В процентах от общего объема доступной памяти, например
-
soft_concurrency_limit— мягкий лимит на число запущенных запросов. При достижении этого лимита новые запросы будут запускаться в группе, только если соседние группы не могут принимать запросы или превысили свои мягкие лимиты. В противном случае новые запросы будут поставлены в очередь. -
hard_concurrency_limit— максимальное число запущенных запросов. При достижении этого лимита новые запросы будут поставлены в очередь. -
soft_cpu_limit— мягкий лимит процессорного времени. При достижении этого лимита значениеhard_concurrency_limitбудет снижено до окончания текущего периода расчета квоты CPU. Значениеsoft_cpu_limitне может быть больше, чемhard_cpu_limit. -
hard_cpu_limit— жесткий лимит процессорного времени. При достижении этого лимита новые запросы будут поставлены в очередь.
Примечание
Если задан хотя бы один из параметров —
soft_cpu_limitилиhard_cpu_limit, задайте также параметрcpu_quota_period.-
max_queued— максимальное число запросов в очереди. При достижении этого лимита новые запросы будут отклонены с ошибкой. -
scheduling_policy— политика планирования запросов. Возможные значения:FAIRWEIGHTEDWEIGHTED_FAIRQUERY_PRIORITY
Если параметр не указан, действует политика
FAIR. -
scheduling_weight— вес группы, используемый в политиках планированияWEIGHTEDиWEIGHTED_FAIR.Если параметр не указан, вес группы равен
1. -
sub_groups— описания дочерних групп.
-
-
selectors— описание правил маршрутизации. Параметрgroupявляется обязательным.-
user— имя пользователя, отправившего запрос, или регулярное выражение Java. Правило срабатывает, если имя пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов любых пользователей. -
user_group— имя группы пользователя, отправившего запрос, или регулярное выражение Java для групп пользователей. Правило срабатывает, если имя группы пользователя соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов пользователей любых групп. -
query_type— тип запроса. Возможные значения:SELECT— запросыSELECT.EXPLAIN— запросыEXPLAIN, кромеEXPLAIN ANALYZE.DESCRIBE— запросыDESCRIBE,DESCRIBE INPUTиDESCRIBE OUTPUT, а также запросыSHOW(например,SHOW CATALOGSилиSHOW SCHEMAS).INSERT— запросыINSERT,CREATE TABLE ASиREFRESH MATERIALIZED VIEW.MERGE— запросыMERGE.DELETE— запросыDELETE.ANALYZE— запросыANALYZE.DATA_DEFINITION— запросыCREATE,ALTERиDROPдля схем, таблиц, представлений и материализованных представлений, а также запросы управления подготовленными выражениями, правами доступа, сессиями и транзакциями.ALTER_TABLE_EXECUTE— запросы видаALTER TABLE ... EXECUTE.
-
source— имя источника запроса или регулярное выражение Java. Правило срабатывает, если имя источника запроса соответствует регулярному выражению. Если параметр не указан, правило срабатывает для запросов из любых источников. -
client_tags— список тегов. Правило срабатывает, только если запрос содержит все указанные теги. Если параметр не указан, правило срабатывает для запросов с любыми тегами. -
group— полное имя целевой ресурсной группы. Включает имена всех ее родительских групп, разделенных точками, начиная с корневой группы. В имени группы могут использоваться подстановки переменных в формате${<имя_переменной>}. Целевая группа не может иметь дочерних групп.
Важно
Запрос, не соответствующий ни одному заданному правилу, отклоняется с ошибкой. Чтобы этого не происходило, добавьте в конец описания правило без ограничивающих условий, содержащее только параметр
group. -
-
cpu_quota_period— период расчета квоты CPU для ресурсных групп. Задается как целое число секунд, минут или часов, например140s,30mили1h.
Подробнее о дереве групп и правилах маршрутизации в разделе Ресурсные группы в Managed Service for Trino.
-
-
Воспользуйтесь вызовом ClusterService.Update и выполните запрос, например с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/trino/v1/cluster_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d @ \ trino.api.cloud.yandex.net:443 \ yandex.cloud.trino.v1.ClusterService.Update \ < body.json -
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Удалить конфигурацию ресурсных групп
- В консоли управления
перейдите в нужный каталог. - Перейдите в сервис Managed Service for Trino.
- Нажмите на имя нужного кластера.
- Перейдите в блок Управление ресурсами.
- Чтобы удалить ненужные ресурсные группы:
- В строке ресурсной группы, которую вы хотите удалить, нажмите на значок
. - (Опционально) Удалите другие ресурсные группы аналогичным образом.
- В строке ресурсной группы, которую вы хотите удалить, нажмите на значок
- Чтобы удалить ненужные правила маршрутизации:
- В строке правила, которое вы хотите удалить, нажмите на значок
. - (Опционально) Удалите другие правила маршрутизации аналогичным образом.
- В строке правила, которое вы хотите удалить, нажмите на значок
- Нажмите кнопку Сохранить изменения.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.
Чтобы удалить все ресурсные группы и правила маршрутизации, выполните команду:
yc managed-trino cluster remove-resource-groups <имя_или_идентификатор_кластера>
Идентификатор и имя кластера можно запросить со списком кластеров в каталоге.
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера.
-
Чтобы удалить все ресурсные группы и правила маршрутизации, удалите из описания кластера параметр
resource_groups. -
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Создайте файл
body.jsonи добавьте в него следующее содержимое:{ "updateMask": "trino.resourceManagement.resourceGroups", "trino": { "resourceManagement": { "resourceGroups": {} } } }Где:
-
updateMask— перечень изменяемых параметров в строку через запятую.Важно
При изменении кластера все параметры изменяемого объекта, которые не были явно переданы в запросе, будут переопределены на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
updateMask. -
resourceGroups— описание ресурсных групп и правил маршрутизации.
-
-
Воспользуйтесь методом Cluster.Update и выполните запрос, например с помощью cURL
:curl \ --request PATCH \ --header "Authorization: Bearer $IAM_TOKEN" \ --url 'https://trino.api.cloud.yandex.net/managed-trino/v1/clusters/<идентификатор_кластера>' --data '@body.json'Идентификатор кластера можно получить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Создайте файл
body.jsonи добавьте в него следующее содержимое:{ "cluster_id": "<идентификатор_кластера>", "update_mask": { "paths": [ "trino.resource_management.resource_groups" ] }, "trino": { "resource_management": { "resource_groups": {} } } }Где:
-
cluster_id— идентификатор кластера.Идентификатор кластера можно получить со списком кластеров в каталоге.
-
update_mask— перечень изменяемых параметров в виде массива строкpaths[].Формат перечисления настроек
"update_mask": { "paths": [ "<настройка_1>", "<настройка_2>", ... "<настройка_N>" ] }Важно
При изменении кластера все параметры изменяемого объекта, которые не были явно переданы в запросе, будут переопределены на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
update_mask. -
resource_groups— описание ресурсных групп и правил маршрутизации.
-
-
Воспользуйтесь вызовом ClusterService.Update и выполните запрос, например с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/trino/v1/cluster_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d @ \ trino.api.cloud.yandex.net:443 \ yandex.cloud.trino.v1.ClusterService.Update \ < body.json -
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Пример конфигурации ресурсных групп в кластере Managed Service for Trino
В примере используются следующие ресурсные группы:
-
global— корневая группа, задающая общие лимитыhardConcurrencyLimitиmaxQueued. Группаglobalсодержит дочерние группыadm,bi,etlиadhoc. -
adm— группа для запросов администраторов и запросов с типомDATA_DEFINITION. Благодаря высокому значениюschedulingWeightснижается вероятность блокировки этих запросов пользовательской нагрузкой. -
bi— группа для запросов систем бизнес-аналитики. В этой группе используется лимитsoftMemoryLimit, чтобы запросы не занимали слишком много памяти и не вытесняли другие типы запросов. Внутри этой группы для каждого инструмента создается экземпляр дочерней группы с динамически сформированным именем. Внутри группы каждого инструмента создаются экземпляры дочерних групп для каждого пользователя. Это задает отдельный лимит для каждого инструмента и пользователя. В результате ограничивается влияние запросов от разных пользователей и разных инструментов друг на друга. -
etl— группа для запросов извлечения, преобразования и загрузки данных. В этой группе используются лимитыsoftCpuLimitиhardCpuLimit, чтобы ограничить потребление процессорного времени запросами. -
adhoc— группа для интерактивных пользовательских запросов. Внутри этой группы для каждого пользователя создается экземпляр дочерней группы с динамически сформированным именем. Это задает отдельный лимит для каждого пользователя, что ограничивает влияние запросов от разных пользователей друг на друга.
Между группами adm, bi, etl и adhoc запросы распределяются в соответствии с политикой планирования weighted_fair. Для группы adhoc не указан параметр schedulingWeight, поэтому используется значение по умолчанию — 1. Для групп bi и adhoc не указана политика планирования, поэтому между их дочерними группами запросы распределяются в соответствии с политикой по умолчанию fair.
Для направления запросов в группы используются следующие правила маршрутизации:
-
Запросы пользователей из группы
adminsнаправляются в ресурсную группуglobal.adm. -
Запросы с тегом
etl_jobнаправляются в группуglobal.etl. -
Запросы с типом
DATA_DEFINITIONнаправляются в ресурсную группуglobal.adm. Благодаря этому запросы для вызова процедурыsystem.runtime.kill_query()не будут ожидать завершения других пользовательских запросов. -
Запросы типа
SELECTот источника с именем видаjdbc#(?<toolname>[^#]+)направляются в группу-шаблонglobal.bi.${toolname}.${USER}. Например, запрос пользователяbobот источникаjdbc#grafanaбудет направлен в экземпляр группы с именемglobal.bi.grafana.bob. -
Все остальные запросы направляются в группу-шаблон
global.adhoc.${USER}. Например, запрос пользователяbobбудет направлен в экземпляр группы с именемglobal.adhoc.bob.
Файл resource-groups.json этого примера:
{
"rootGroups": [
{
"name": "global",
"hardConcurrencyLimit": 20,
"maxQueued": 200,
"schedulingPolicy": "weighted_fair",
"subGroups": [
{
"name": "adm",
"hardConcurrencyLimit": 5,
"maxQueued": 50,
"schedulingWeight": 5
},
{
"name": "bi",
"hardConcurrencyLimit": 10,
"softMemoryLimit": "20%",
"maxQueued": 100,
"schedulingWeight": 3,
"subGroups": [
{
"name": "${toolname}",
"hardConcurrencyLimit": 5,
"maxQueued": 50,
"subGroups": [
{
"name": "${USER}",
"hardConcurrencyLimit": 2,
"maxQueued": 20
}
]
}
]
},
{
"name": "etl",
"hardConcurrencyLimit": 5,
"softCpuLimit": "20s",
"hardCpuLimit": "40s",
"maxQueued": 50,
"schedulingWeight": 1
},
{
"name": "adhoc",
"hardConcurrencyLimit": 5,
"maxQueued": 100,
"subGroups": [
{
"name": "${USER}",
"hardConcurrencyLimit": 2,
"maxQueued": 20
}
]
}
]
}
],
"selectors": [
{
"userGroup": "admins",
"group": "global.adm"
},
{
"clientTags": ["etl_job"],
"group": "global.etl"
},
{
"queryType": "DATA_DEFINITION",
"group": "global.adm"
},
{
"source": "jdbc#(?<toolname>[^#]+)",
"queryType": "SELECT",
"group": "global.bi.${toolname}.${USER}"
},
{
"group": "global.adhoc.${USER}"
}
],
"cpuQuotaPeriod": "1m"
}
Файл resource-groups.json этого примера:
{
"rootGroups": [
{
"name": "global",
"hardConcurrencyLimit": 20,
"maxQueued": 200,
"schedulingPolicy": "weighted_fair",
"subGroups": [
{
"name": "adm",
"hardConcurrencyLimit": 5,
"maxQueued": 50,
"schedulingWeight": 5
},
{
"name": "bi",
"hardConcurrencyLimit": 10,
"softMemoryLimit": "20%",
"maxQueued": 100,
"schedulingWeight": 3,
"subGroups": [
{
"name": "${toolname}",
"hardConcurrencyLimit": 5,
"maxQueued": 50,
"subGroups": [
{
"name": "${USER}",
"hardConcurrencyLimit": 2,
"maxQueued": 20
}
]
}
]
},
{
"name": "etl",
"hardConcurrencyLimit": 5,
"softCpuLimit": "20s",
"hardCpuLimit": "40s",
"maxQueued": 50,
"schedulingWeight": 1
},
{
"name": "adhoc",
"hardConcurrencyLimit": 5,
"maxQueued": 100,
"subGroups": [
{
"name": "${USER}",
"hardConcurrencyLimit": 2,
"maxQueued": 20
}
]
}
]
}
],
"selectors": [
{
"userGroup": "admins",
"group": "global.adm"
},
{
"clientTags": ["etl_job"],
"group": "global.etl"
},
{
"queryType": "DATA_DEFINITION",
"group": "global.adm"
},
{
"source": "jdbc#(?<toolname>[^#]+)",
"queryType": "SELECT",
"group": "global.bi.${toolname}.${USER}"
},
{
"group": "global.adhoc.${USER}"
}
],
"cpuQuotaPeriod": "1m"
}
Файл body.json этого примера:
{
"updateMask": "trino.resourceManagement.resourceGroups",
"trino": {
"resourceManagement": {
"resourceGroups": {
"rootGroups": [
{
"name": "global",
"hardConcurrencyLimit": "20",
"maxQueued": "200",
"schedulingPolicy": "weighted_fair",
"subGroups": [
{
"name": "adm",
"hardConcurrencyLimit": "5",
"maxQueued": "50",
"schedulingWeight": "5"
},
{
"name": "bi",
"hardConcurrencyLimit": "10",
"softMemoryLimit": "20%",
"maxQueued": "100",
"schedulingWeight": "3",
"subGroups": [
{
"name": "${toolname}",
"hardConcurrencyLimit": "5",
"maxQueued": "50",
"subGroups": [
{
"name": "${USER}",
"hardConcurrencyLimit": "2",
"maxQueued": "20"
}
]
}
]
},
{
"name": "etl",
"hardConcurrencyLimit": "5",
"softCpuLimit": "20s",
"hardCpuLimit": "40s",
"maxQueued": "50",
"schedulingWeight": "1"
},
{
"name": "adhoc",
"hardConcurrencyLimit": "5",
"maxQueued": "100",
"subGroups": [
{
"name": "${USER}",
"hardConcurrencyLimit": "2",
"maxQueued": "20"
}
]
}
]
}
],
"selectors": [
{
"userGroup": "admins",
"group": "global.adm"
},
{
"clientTags": ["etl_job"],
"group": "global.etl"
},
{
"queryType": "DATA_DEFINITION",
"group": "global.adm"
},
{
"source": "jdbc#(?<toolname>[^#]+)",
"queryType": "SELECT",
"group": "global.bi.${toolname}.${USER}"
},
{
"group": "global.adhoc.${USER}"
}
],
"cpuQuotaPeriod": "1m"
}
}
}
}
Файл body.json этого примера:
{
"cluster_id": "<идентификатор_кластера>",
"update_mask": {
"paths": [
"trino.resource_management.resource_groups"
]
},
"trino": {
"resource_management": {
"resource_groups": {
"root_groups": [
{
"name": "global",
"hard_concurrency_limit": "20",
"max_queued": "200",
"scheduling_policy": "weighted_fair",
"sub_groups": [
{
"name": "adm",
"hard_concurrency_limit": "5",
"max_queued": "50",
"scheduling_weight": "5"
},
{
"name": "bi",
"hard_concurrency_limit": "10",
"soft_memory_limit": "20%",
"max_queued": "100",
"scheduling_weight": "3",
"sub_groups": [
{
"name": "${toolname}",
"hard_concurrency_limit": "5",
"max_queued": "50",
"sub_groups": [
{
"name": "${USER}",
"hard_concurrency_limit": "2",
"max_queued": "20"
}
]
}
]
},
{
"name": "etl",
"hard_concurrency_limit": "5",
"soft_cpu_limit": "20s",
"hard_cpu_limit": "40s",
"max_queued": "50",
"scheduling_weight": "1"
},
{
"name": "adhoc",
"hard_concurrency_limit": "5",
"max_queued": "100",
"sub_groups": [
{
"name": "${USER}",
"hard_concurrency_limit": "2",
"max_queued": "20"
}
]
}
]
}
],
"selectors": [
{
"user_group": "admins",
"group": "global.adm"
},
{
"client_tags": ["etl_job"],
"group": "global.etl"
},
{
"query_type": "DATA_DEFINITION",
"group": "global.adm"
},
{
"source": "jdbc#(?<toolname>[^#]+)",
"query_type": "SELECT",
"group": "global.bi.${toolname}.${USER}"
},
{
"group": "global.adhoc.${USER}"
}
],
"cpu_quota_period": "1m"
}
}
}
}