使用keytab

时间:2015-08-05 05:34:33

标签: hadoop hive kerberos cloudera yarn

我正在使用CDH 5.3.3并使用配置单元JDBC驱动程序连接到安全集群中的配置单元。我尝试使用

使用keytab登录

UserGroupInformation.loginUserFromKeytab(lprincipal,keytabpath);

我为hive网址使用了以下格式。

JDBC:hive2://本地主机:10000; AuthMech = 1; KrbRealm = EXAMPLE.COM; KrbHostFQDN = hs2.example.com; KrbServiceName =蜂巢

示例代码:

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

Url采用以下格式:

JDBC:hive2://本地主机: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

对于群集的不同分布,在添加调试之后,我看到以下异常:

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 org.apache.thrift.transport.TSaslClientTransport@1f20a0ab
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)

3 个答案:

答案 0 :(得分:9)

小心,凡人:Kerberos只是黑魔法。它会吸走你的灵魂。严重。

现在,有记录很少的方法来激活GSSAPI跟踪,这是你强烈关注实际问题的唯一希望(可能是一个神秘的语法错误) GSS默认放弃的配置文件)

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

法术的原始书是there

答案 1 :(得分:1)

link将帮助您使用keytab连接启用了kerberos(kerberised)的配置单元群集。

由于您已经有了keytab文件,因此您还需要JAAS Config文件,Java Subjects抽象和Java CallbackHandler才能成功连接。当然,还需要依赖库(jar文件)。

HTH。

答案 2 :(得分:0)

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

有一些与kerberized Hive的JDBC连接的工作示例。

@Samson Scharfrichter关于调试的好建议。 +1

  

javax.security.sasl.SaslException:GSS启动失败[引起   GSSException:未提供有效凭据(机制级别:失败   找到任何Kerberos tgt)]       在com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:212)        at org.apache.thrift.transport.TSaslClientTransport.handleSaslStartMessage(TSaslClientTransport.java:94)

“GSS启动失败”+“GSSException:未提供有效凭据” 通常表示您的客户端 kerberos票证不存在或已过期。

请在客户端运行klist并将其复制粘贴到此处。