如何从客户端/本地窗口清除curbs auth连接到impala服务器

时间:2018-05-17 03:13:49

标签: java windows cloudera impala

我正在使用Impala Cloudera设置从db读取数据。下面提供了java代码来连接(在服务器上成功运行)并使用Kerberos auth从db获取数据。

我使用的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.confkerb5.confuser.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约束委派相关的少数links。无法理解应该遵循的步骤是什么以及如何准确。

帮助我运行并从Windows机器成功连接。

0 个答案:

没有答案