2015-08-05 2 views
2

Я использую CDH 5.3.3 и используя драйвер Jive Jive для подключения к улью в защищенном кластере. Я попытался войти в систему с помощью keytab, используяподключиться к улью в защищенном Kerberos аутентифицированном кластере с помощью keytab

UserGroupInformation.loginUserFromKeytab (lprincipal, keytabpath);

Я использовал следующий формат для urive url.

jdbc: hive2: // localhost: 10000; AuthMech = 1; KrbRealm = EXAMPLE.COM; KrbHostFQDN = hs2.example.com; KrbServiceName = улей

Пример кода:

// Authenticating Kerberos principal 
System.out.println("Principal Authentication: "); 
final String user = "[email protected]"; 
final String keyPath = "cloudera.keytab"; 
UserGroupInformation.loginUserFromKeytab(user, keyPath); 
Connection connection = DriverManager.getConnection(url); 

Url в следующем формате:

: hive2 JDBC: // локальный: 10000; AuthMech = 1; KrbRealm = EXAMPLE.COM; KrbHostFQDN = hs2.example.com; KrbServiceName = улей

я получаю следующее исключение, я был бы признателен, если какая-то помощь предоставляется в определении причины этого вопроса:

com.cloudera.hive.support.exceptions.GeneralException: CONN_KERBEROS_AUTHENTICATION_ERROR_GET_TICKETCACHE 

javax.security.auth.login.LoginException: Unable to obtain Princpal Name for authentication 
at com.sun.security.auth.module.Krb5LoginModule.promptForName(Krb5LoginModule.java:800) 
at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:671) 
at com.sun.security.auth.module.Krb5LoginModule.login(Krb5LoginModule.java:584) 
at sun.reflect.NativeMethodAccessorImpl.inv 

FOr в differn распределения кластер, после добавления отладки, я вижу следующее исключение:

DEBUG org.apache.hadoop.security.UserGroupInformation: hadoop login 
DEBUG org.apache.hadoop.security.UserGroupInformation: hadoop login commit 
DEBUG org.apache.hadoop.security.UserGroupInformation: using kerberos   user:null 
DEBUG org.apache.hadoop.security.UserGroupInformation: using local user:UnixPrincipal: user66 
DEBUG org.apache.hadoop.security.UserGroupInformation: UGI loginUser:user66 (auth:KERBEROS) 
DEBUG org.apache.hadoop.security.UserGroupInformation: PrivilegedAction as:user66 (auth:KERBEROS) from:org.apache.hadoop.hive.thrift.client.TUGIAssumingTransport.open(TUGIAssumingTransport.java:49) 
DEBUG org.apache.thrift.transport.TSaslTransport: opening transport [email protected] 
ERROR org.apache.thrift.transport.TSaslTransport: SASL negotiation failure 
javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)] 
    at com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:212) 
    at org.apache.thrift.transport.TSaslClientTransport.handleSaslStartMessage(TSaslClientTransport.java:94) 
    at org.apache.thrift.transport.TSaslTransport.open(TSaslTransport.java:253) 
    at org.apache.thrift.transport.TSaslClientTransport.open(TSaslClientTransport.java:37) 
    at org.apache.hadoop.hive.thrift.client.TUGIAssumingTransport$1.run(TUGIAssumingTransport.java:52) 
    at org.apache.hadoop.hive.thrift.client.TUGIAssumingTransport$1.run(TUGIAssumingTransport.java:49) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:415) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1548) 
    at org.apache.hadoop.hive.thrift.client.TUGIAssumingTransport.open(TUGIAssumingTransport.java:49) 
    at org.apache.hive.jdbc.HiveConnection.openTransport(HiveConnection.java:156) 
    at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:96) 
    at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:104) 
+0

BTW: ваш URL-адрес отсутствует **/** или **/someDB ** после части «host: port». Без косой черты драйвер Jive Jive не сможет правильно проанализировать аргументы (если эта проблема не будет окончательно решена в вашей версии) –

+0

@SamsonScharfrichter Я отредактировал раздел url. пожалуйста, проверьте – Atom

+0

. Он говорит, что он может войти в loginUserFromKeytab (пользователь, keyPath); но кэш кеша недоступен. Я сомневаюсь, что если этот API-интерфейс можно использовать для соединений JDBC? – Atom

ответ

9

Берегись, смертны: Kerberos только черная магия. Это сосает вашу душу. Шутки в сторону.

Теперь есть очень плохо документированы способ активировать трассировку GSSAPI, что ваш только надеяться от масштабирования на фактическом выпуске (возможно зашифрованное синтаксическую ошибку в конфигурационном файле, который GSS молча отбрасывает по умолчанию)

-Djava.security.debug=gssloginconfig,configfile,configparser,logincontext 

Оригинальная книга заклинаний there.

+1

Отличный комментарий. Kerberos - черная магия! Но, скажем так, если вы преодолеете крутую кривую обучения, все станет проще. –

0

http://appcrawler.com/wordpress/2015/06/18/examples-of-connecting-to-kerberos-hive-in-jdbc/

есть некоторые рабочие примеры для JDBC подключения к керберизованной улье.

Хороший совет от @Samson Scharfrichter при отладке. Добавили +1

javax.security.sasl.SaslException: GSS инициируют не удалось [Вызванный GSSException: Нет действительные учетные данные, предоставленные (уровень Механизм: не удалось найти какой-либо Kerberos TGT)] на com.sun. security.sasl.gsskerb.GssKrb5Client.evaluateChallenge (GssKrb5Client.java:212) в org.apache.thrift.transport.TSaslClientTransport.handleSaslStartMessage (TSaslClientTransport.java:94)

"ГСС инициируют не удалось" + «GSSException : Не указаны действительные учетные данные " обычно означает ваш на стороне клиента kerberos билет не существует или истек.

Запустите klist на стороне клиента и скопируйте его здесь.

1

Этот link поможет вам подключить кластер кластера с использованием кебероса (керинизированный) с помощью keytab.

Поскольку у вас уже есть файл keytab, вам также необходим файл конфигурации JAAS, абстракция Java Subjects и Java CallbackHandler для успешного соединения. И, конечно же, требуются зависимые библиотеки (файлы jar).

HTH.

+0

Хотя это теоретически может ответить на вопрос, [предпочтительно] (https://meta.stackoverflow.com/q/8259/359284), чтобы включить важные части ответа здесь, и укажите ссылку для справки. Ответы с доминирующими ссылками могут стать недействительными через [link rot] (https://en.wikipedia.org/wiki/Link_rot). –

Смежные вопросы