Почему мы используем субъект-службу Hive при использовании Beeline для подключения к Hive в кластере EMR с поддержкой Kerberos?

Я пытаюсь подключиться к Hive с помощью beeline в кластере EMR (с включенным Kerberos), и мне интересно, почему я запускаю kinit (используя свою учетную запись пользователя), а затем следующее:

beeline -u "jdbc:hive2://localhost:10000/default;principal=hive/_HOST@REALM"

Часть, которая меня смущает, - это принцип выше. Почему мы используем «principal=hive/_HOST@REALM» (из того, что я прочитал, это субъект-служба Hive), когда я аутентифицировал свою учетную запись пользователя, используя kinit в предыдущей команде?

Буду ли я выполнять запросы к субъекту-службе Hive или моей учетной записи пользователя? Все ли пользователи используют субъект-службу Hive при использовании Beeline? Есть ли за этим какая-то причина?

Ссылка для дальнейшего контекста: Подключение к Hive через Beeline с помощью keytab Kerberos


person Brandon    schedule 09.02.2019    source источник


Ответы (1)


Параметр principal= в этом URL-адресе JDBC фактически относится к субъекту-службе (SPN), т. е. к тому, к чему вам нужно подключиться. Это, по общему признанию, двусмысленно и запутанно.

kinit аутентифицирует вашего участника-пользователя (UPN), создавая "билет на выдачу билетов" (TGT), который сохраняется в кэше билетов.
Позже клиент JDBC (или клиент HTTP, или Java-клиент Hive Metastore, или Java-клиент HDFS, что угодно) будет использовать TGT для запроса сервисного билета для соответствующего типа сервиса на соответствующем хосте; по какой-то причине Java никогда не помещает этот билет службы в кэш (в отличие от curl или Python, которые используют библиотеку C, например kinit).

Обычно имена участников-служб определяются в файлах конфигурации Hadoop с именем ***-site.xml, которые используются клиентскими библиотеками Hadoop.
Но... драйвер JDBC должен быть автономным и не зависеть от внешних библиотек. или файлы конфигурации и получить все параметры подключения из URL-адреса. Вот почему вы должны явно указать имя участника-службы в своем URL-адресе. Дух.

person Samson Scharfrichter    schedule 09.02.2019
comment
Означает ли это, что я буду подключаться с использованием Hive SPN, но мои запросы будут выполняться для учетной записи пользователя, с которой я прошел аутентификацию? - person Brandon; 11.02.2019
comment
Нет (если я правильно понимаю, что вы подразумеваете под использованием). Вы подключаетесь в качестве своего имени участника-пользователя к имени участника-службы. И да или нет, ваши запросы будут выполняться под вашим UPN или под учетной записью службы Hive, но с вашими привилегиями — в зависимости от модели безопасности, которую использует HiveServer2 (например, в CDH Sentry применяет 2-й подход) - person Samson Scharfrichter; 11.02.2019