2017-11-08 11 views
1

JDBC経由でHive-Server2に接続しようとしています.ServerがKerberosを有効にしています。Hive JDBC Kerberos接続エラー

私は私が何をしないのですkeytabファイルが存在

であるエッジノードのコードを実行しています、次のコードを使用していますか?

import org.apache.hadoop.security.UserGroupInformation; 

public class HiveJdbcClient { 
private static String driverName = "org.apache.hive.jdbc.HiveDriver"; 

public static void main(String[] args) 
     throws SQLException, IOException, ClassNotFoundException { 

    org.apache.hadoop.conf.Configuration conf = new org.apache.hadoop.conf.Configuration(); 
    conf.set("hadoop.security.authentication", "Kerberos"); 
    UserGroupInformation.setConfiguration(conf); 

    int ch = 1; 
    String USER = (ch == 0) ? "hive/[email protected]_DEV9.xyz.COM" 
      : "[email protected]_DEV9.xyz.COM"; 
    String PASSWORD = (ch == 0) ? "/etc/security/keytabs/hive.service.keytab" 
      : "/u/users/abcd/.abcd.keytab"; 
    System.out.println("User = " + USER + "Keytab =" + PASSWORD); 

    File f = new File(PASSWORD); 
    if (f.exists()) { 
     System.out.println("File exists"); 
    } else { 
     System.out.println("File not exists"); 
    } 
    UserGroupInformation.loginUserFromKeytab(USER, PASSWORD); 

    String ConnectionURL = "jdbc:hive2://tstr400382.xyz.com:2181,tstr400383.xyz.com:2181,tstr400384.xyz.com:2181,tstr400386.xyz.com:2181,tstr400387.xyz.com:2181/;" 
      + "serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2" 
      + ";principal=hive/[email protected]_DEV9.xyz.COM;transportMode=http;httpPath=cliservice"; 

    System.out.println("below connection url"); 

    Class.forName(driverName); 
    Connection con = DriverManager.getConnection(ConnectionURL); 
    Statement stmt = con.createStatement(); 
    String sql = "show databases;"; 
    System.out.println("Running: " + sql); 
    ResultSet res = stmt.executeQuery(sql); 
    if (res.next()) { 
     System.out.println(res.getString(1)); 
    } 

} 
} 

私は取得していますエラー、次の私は、キータブに

kinit -kt /u/users/abcd/.abcd.keytab [email protected]_DEV9.xyz.COM 

KLISTを行うことができる午前

Exception in thread "main" java.io.IOException: Login failure for [email protected]_DEV9.xyz.COM from keytab /u/users/abcd/.abcd.keytab: javax.security.auth.login.LoginException: Unable to obtain password from user 

at org.apache.hadoop.security.UserGroupInformation.loginUserFromKeytab(UserGroupInformation.java:1098) 
at hadoop.test.HiveJdbcClient.main(HiveJdbcClient.java:42) 
Caused by: javax.security.auth.login.LoginException: Unable to obtain password from user 

at com.sun.security.auth.module.Krb5LoginModule.promptForPass(Krb5LoginModule.java:897) 
at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:760) 
at com.sun.security.auth.module.Krb5LoginModule.login(Krb5LoginModule.java:617) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:483) 
at javax.security.auth.login.LoginContext.invoke(LoginContext.java:755) 
at javax.security.auth.login.LoginContext.access$000(LoginContext.java:195) 
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:682) 
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:680) 
at java.security.AccessController.doPrivileged(Native Method) 
at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680) 
at javax.security.auth.login.LoginContext.login(LoginContext.java:587) 
at org.apache.hadoop.security.UserGroupInformation.loginUserFromKeytab(UserGroupInformation.java:1089) 

Keytab name: FILE:.abcd.keytab 
    KVNO Principal 
---- -------------------------------------------------------------------------- 
    1 [email protected]_DEV9.xyz.COM 
    1 [email protected]_DEV9.xyz.COM 

私は長いから、それに引っかかっています、助けてください。

私は学習にthisを使用して、私は下記のようサービスプリンシパル「ハイブ」とユーザープリンシパル「ABCD」のために使用されるKerberosレルム名に差があるかもしれません

答えて

0

それに続い:

hive/[email protected]<KDC_REALM_1> 

[email protected]<KDC_REALM_2> 

クラスタ管理者に確認し、相違がある場合は必要な変更を行ってください。

+0

Zookeeper構成管理用です。同じURLを使用してビーラインに接続できます。問題はUserGroupInformation.loginUserFromKeytab(USER、PASSWORD)と思われます。 –

+0

@ayushnigam私はあなたの回答に基づいて私の答えを変更しました。 – Marco99