关于kerberos使用keytab安全认证连接hive票据过期的问题及解决方法。

关于kerberos使用keytab安全认证连接hive票据过期的问题及解决方法

问题描述

本人在使用HiveStreaming的过程中,使用kerberos keytab进行安全验证,程序会保持长期连接。(hive jdbc 连接也要同样的问题)
登录主要代码:

LoginContext lc = new LoginContext(clientName, new TextCallbackHandler());
lc.login();
UserGroupInformation.loginUserFromSubject(lc.getSubject());

问题:
根据我们的kerberos设置,我们的票据Kerberos tgt 生命周期为24小时,到了24小时后,程序会报错连接失败。
报错信息:


Caused by: org.ietf.jgss.GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)
	at sun.security.jgss.krb5.Krb5InitCredential.getInstance(Krb5InitCredential.java:147)
	at sun.security.jgss.krb5.Krb5MechFactory.getCredentialElement(Krb5MechFactory.java:122)
	at sun.security.jgss.krb5.Krb5MechFactory.getMechanismContext(Krb5MechFactory.java:187)
	at sun.security.jgss.GSSManagerImpl.getMechanismContext(GSSManagerImpl.java:224)
	at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:212)
	at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:179)
	at com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:192)
	... 53 common frames omitted

无票据可用。

解决方法

跟踪HiveStreaming连接的源码关键调用过程

  //代码1   自己写的代码   创建连接
  connection = HiveStreamingConnection.newBuilder()
                    .withDatabase(database)
                    .withTable(tableName)
                    .withAgentInfo(tableName + "_hiveStreaming-agent")
                    .withRecordWriter(writer)
                    .withHiveConf(hiveConf)
                    .connect();
  //代码2  源码   创建hive客户端
  this.msClient = getMetaStoreClient(this.conf, this.metastoreUri, 
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值