Проблема с подключением к Hive с использованием JDBC с аутентификацией Kerberos.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Проблема с подключением к Hive с использованием JDBC с аутентификацией Kerberos.

Сообщение Anonymous »

Я пытаюсь написать программу для подключения к Hive с использованием драйвера Jdbc с аутентификацией Kerberos. Моя программа выглядит следующим образом:

Код: Выделить всё

public static void main(String a[])
{

...

connectionString_ = "jdbc:hive2://cdh-542-kerberos.domain.com:10000/default;principal=hive/cdh-542-kerberos.domain.com@REALMDOMAIN";

UserGroupInformation ugi = createUgi();

connection = ugi.doAs(new PrivilegedExceptionAction() {
public Connection run() throws Exception {
Connection connection = null;
Class.forName(jdbcDriverClass_);
connection =  DriverManager.getConnection(connectionString_);
return connection;
}
});
...
}

public static UserGroupInformation createUgi()
{
try{
UserGroupInformation ugi = null;

String principal = "hive/cdh-542-kerberos.domain.com@REALMDOMAIN"
String keyTabLocation = "hive.keytab"

logger.debug("principal:" + principal);
logger.debug("keyTabLocation:" + keyTabLocation);
ugi =  createkerbUser( principal, keyTabLocation);
return ugi;
}
catch(Exception e)
{
throw new BDEToolSecurityException(BDEToolSecurityException.SECURITYEXCPETION, e);
}
}

public static UserGroupInformation createkerbUser( String principal, String keyTabFilePath)
{
UserGroupInformation app_ugi = UserGroupInformation.loginUserFromKeytabAndReturnUGI(principal, keyTabFilePath);
String user = getUserfromPrincipal(principal);

if(user.trim().length() > 0){
UserGroupInformation proxy_ugi = UserGroupInformation.createProxyUser(user, app_ugi);
return proxy_ugi;
}
return app_ugi;
}

private static String getUserfromPrincipal(String principal)
{
String user = Constants.emptyString;

if(principal.contains(Constants.fSlash)){
String[]  tokens = principal.split(Constants.fSlash);
if(tokens.length > 1){
user = tokens[0];
}
}
return user;
}
Этот код дает сбой при попытке выполнить ugi.doAs() ... с приведенным ниже исключением

Код: Выделить всё

java.sql.SQLException: Could not open client transport with JDBC Uri: jdbc:hive2://cdh-542-kerberos.informatica.com:10000/default;principal=hive/cdh-542-kerberos.informatica.com@INFAQAKERB: GSS initiate failed
at org.apache.hive.jdbc.HiveConnection.openTransport(HiveConnection.java:215)
at org.apache.hive.jdbc.HiveConnection.(HiveConnection.java:163)
at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:105)
at java.sql.DriverManager.getConnection(DriverManager.java:571)
at java.sql.DriverManager.getConnection(DriverManager.java:233)
at com.informatica.gcs.tools.bde.connectivity.tool.hive.HiveJdbcTest$1.run(HiveJdbcTest.java:148)
at com.informatica.gcs.tools.bde.connectivity.tool.hive.HiveJdbcTest$1.run(HiveJdbcTest.java:144)
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:1671)
... 6 more
Caused by: org.apache.thrift.transport.TTransportException: GSS initiate failed
at org.apache.thrift.transport.TSaslTransport.sendAndThrowMessage(TSaslTransport.java:232)
at org.apache.thrift.transport.TSaslTransport.open(TSaslTransport.java:316)
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:1671)
at org.apache.hadoop.hive.thrift.client.TUGIAssumingTransport.open(TUGIAssumingTransport.java:49)
at org.apache.hive.jdbc.HiveConnection.openTransport(HiveConnection.java:190)
... 15 more
И таблица ключей, и принципал кажутся правильными. Я могу успешно выполнить команду

Код: Выделить всё

kinit -k -t hive.keytab hive/cdh-542-kerberos.informatica.com@INFAQAKERB
Может ли кто-нибудь помочь мне в этом? Я застрял в этой проблеме почти неделю. При необходимости могу предоставить дополнительную информацию.

Подробнее здесь: https://stackoverflow.com/questions/348 ... entication
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»