Я работаю с установкой Impala Cloudera для чтения данных из БД.Ниже приведен код Java для подключения (выполняется на сервере успешно) и получения данных из базы данных с аутентификацией Kerberos.
Java-код, который я использую:
private static void init() {
System.setProperty("sun.security.krb5.debug", "true");
System.setProperty("java.security.krb5.conf", "server-path/krb5.conf");
System.setProperty("java.security.auth.login.config", "server-path/jaas.conf");
}
private static void createConnection() throws Exception {
Connection conn = null;
PreparedStatement pstmt = null;
try {
init();
Class.forName("com.cloudera.impala.jdbc4.Driver");
// Authenticating Kerberos principal
System.out.println("Principal Authentication: ");
final String user = "user";
final String keyPath = "conserver-path/user.keytab";
org.apache.hadoop.conf.Configuration conf = new org.apache.hadoop.conf.Configuration();
conf.set("hadoop.security.authentication", "Kerberos");
UserGroupInformation.setConfiguration(conf);
UserGroupInformation.loginUserFromKeytab(user, keyPath);
conn = DriverManager.getConnection("jdbc:impala://ipaddress;AuthMech=1;KrbRealm=realm;KrbHostFQDN=fqdn;KrbServiceName=impala",
"user", "pwd");
System.out.println(conn);
System.out.println("=========================================================================");
String query = "select count(*) from tableName";
System.out.println("Connection :" + conn);
pstmt = conn.prepareStatement(query);
ResultSet rs = pstmt.executeQuery();
System.out.println(rs);
System.out.println("--------------------------------------------");
while (rs != null && rs.next()) {
// System.out.println(rs.getFetchSize());
System.out.println(rs.getInt(1));
}
} catch(Exception e) {
e.printStackTrace();
} finally {
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
}
}
У меня проблема при запуске из локальной среды / среды Windows для подключения к серверу / базе данных Cloudera Impala.Скопировал jaas.conf
, kerb5.conf
, user.keytab
в локальный путь, но программа выдает:
>>> Found no TGT's in LSA
java.sql.SQLException: [Simba][ImpalaJDBCDriver](500168) Error creating login context using ticket cache: Unable to obtain Princpal Name for authentication.
at com.cloudera.hivecommon.api.HiveServer2ClientFactory.createTransport(Unknown Source)
at com.cloudera.hivecommon.api.HiveServer2ClientFactory.createClient(Unknown Source)
at com.cloudera.hivecommon.core.HiveJDBCCommonConnection.establishConnection(Unknown Source)
at com.cloudera.impala.core.ImpalaJDBCConnection.establishConnection(Unknown Source)
at com.cloudera.jdbc.core.LoginTimeoutConnection.connect(Unknown Source)
at com.cloudera.jdbc.common.BaseConnectionFactory.doConnect(Unknown Source)
at com.cloudera.jdbc.common.AbstractDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(DriverManager.java:571)
at java.sql.DriverManager.getConnection(DriverManager.java:215)
at Com.connection.impala.TestImpala.createConnection(TestImpala.java:50)
Caused by: com.cloudera.support.exceptions.GeneralException: [Simba][ImpalaJDBCDriver](500168) Error creating login context using ticket cache: Unable to obtain Princpal Name for authentication .
... 10 more
Прочитать несколько ссылок , соответствующих Kerberos Constrained Delegation.Не могу понять, что и как именно следует выполнить шаги.
Помогите мне запустить и успешно установить соединение с Windows Machine.