Параметр 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.