Почему мы используем субъект-службу Hive при использовании beeline для подключения к Hive в кластере EMR с поддержкой Kerberos? - PullRequest
0 голосов
/ 09 февраля 2019

Я пытаюсь подключиться к 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 с использованием Kerberos keytab

1 Ответ

0 голосов
/ 09 февраля 2019

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

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

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

...