Политики изоляции в Kyuubi
Обзор
Kyuubi поддерживает настройку общего доступа (share levels) к движкам и позволяет указывать условия их совместного использования для отдельных сессий, пользователей или групп.
Эта функция обеспечивает большую гибкость в управлении рабочей нагрузкой кластера: более изолированные движки обеспечивают лучшую стабильность работы, а совместное использование движка несколькими пользователями позволяет экономить ресурсы кластера.
Текущие поддерживаемые уровни изоляции:
-
CONNECTION
-
USER
-
GROUP
-
SERVER
Уровень общего доступа по умолчанию — USER. Помимо основных четырех уровней общего доступа, Kyuubi позволяет использовать несколько движков для одного пользователя или группы.
Все поддерживаемые уровни общего доступа могут использоваться вместе на одном сервере или кластере Kyuubi.
Уровни общего доступа работают одинаково как для конфигураций с одним узлом, так и для кластеров с высокой доступностью (High Availability, HA).
Share level | Количество движков | Возможности | Уровень изоляции | Доступность |
---|---|---|---|---|
CONNECTION |
Один движок на сессию |
Large-scale ad hoc ETL |
Высокий |
Низкая |
USER |
Один движок на пользователя |
Small-scale ad hoc ETL |
Средний |
Средняя |
GROUP |
Один движок на группу |
Small-scale ad hoc ETL |
Низкий |
Высокая |
SERVER |
Один движок на инстанс |
Admin |
Если сервер защищен — высокий, если не защищен — низкий |
Только для администратора, если сервер защищен |
Share levels
CONNECTION
Уровень общего доступа CONNECTION создает изолированный движок, доступный только для одной сессии. В рамках этой сессии пользователь может выполнять разные операции, включая вызовы функций или запросы метаданных.
Как только сессия, создавшая движок, закрывается, движок также отключается.
USER
При уровне общего доступа USER движок изолируется по пользователю. У каждого движка есть конкретный пользователь, являющийся владельцем этого движка. Любые запросы, отправленные от этого пользователя с одного или нескольких клиентов, перенаправляются на движок этого пользователя.
Если у пользователя открыто несколько сессий, они будут принадлежать одному и тому же SparkContext, но каждая сессия будет иметь свой собственный экземпляр SparkSession, который содержит отдельное состояние сессии, включая временные представления, конфигурацию SQL, UDF и т.д.
Чтобы создать Singleton-экземпляр SparkSession, который будет использоваться несколькими сессиями, установите для параметра kyuubi.engine.single.spark.session
значение true
вручную или с помощью ADCM.
Движок с общим уровнем доступа USER выключается после закрытия всех подключенных к нему сессий и после истечения срока его жизни (TTL).
GROUP
При уровне общего доступа GROUP движок используется пользователями из одной группы совместно. Все сессии пользователей в одной группе направляются к движку этой группы.
В качестве владельца движка указывается название группы. Группа пользователей формируется в соответствии с Hadoop GroupsMapping. Если группа не найдена, уровень общего доступа меняется на USER.
Движок с уровнем общего доступа GROUP отключается после закрытия всех сессий пользователей группы и после истечения его времени жизни (TTL).
SERVER
Уровень общего доступа SERVER работает аналогично Spark Thrift Server с высокой доступностью (High Availability, HA). Для каждого инстанса Kyuubi создается отдельный движок.
Subdomain
С помощью параметра kyuubi.engine.share.level.subdomain
можно настроить дополнительные политики изоляции для уровней общего доступа USER, GROUP или SERVER. Конфигурация этого параметра позволяет создавать несколько движков для одного пользователя, группы или сервера.
Если доступно несколько движков, пользователь может указать, какой использовать в URL соединения JDBC.
Конфигурация
Параметр | Значение | Значение по умолчанию | Описание |
---|---|---|---|
kyuubi.engine.share.level (kyuubi.session.engine.share.level) |
USER, CONNECTION, GROUP, SERVER |
USER |
Тип уровня общего доступа. Можно задать как в файле конфигурации сервера, так и в URL-адресе подключения. У URL более высокий приоритет |
kyuubi.session.engine.idle.timeout |
Число с индикатором единиц времени |
PT30 (30 минут) |
Время, которое движок может простаивать. Можно задать как в файле конфигурации сервера, так и в URL-адресе подключения. У URL более высокий приоритет |
kyuubi.engine.share.level.subdomain (kyuubi.engine.share.level.sub.domain) |
Валидное имя ноды ZooKeeper |
— |
Дополнительная изоляция движка по znode. Можно задать как в файле конфигурации сервера, так и в URL-адресе подключения. У URL более высокий приоритет |