Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带Kerberos的HBase-使HTable实例保持打开超过10小时_Java_Hbase_Kerberos - Fatal编程技术网

Java 带Kerberos的HBase-使HTable实例保持打开超过10小时

Java 带Kerberos的HBase-使HTable实例保持打开超过10小时,java,hbase,kerberos,Java,Hbase,Kerberos,情况是这样的:我们有一个安全的(Kerberos)HBase集群。 我有一个对象,它在启动时创建一个HTable实例并将其挂起。它呼吁: UserGroupInformation.setConfiguration(configuration); UserGroupInformation.loginUserFromKeytab(user, keytab); 登录到Kerberized集群。 然后,该对象在未使用的情况下挂起数小时。超过10小时后(来自Kerberos集群的票证超时),下一个扫描表

情况是这样的:我们有一个安全的(Kerberos)HBase集群。 我有一个对象,它在启动时创建一个HTable实例并将其挂起。它呼吁:

UserGroupInformation.setConfiguration(configuration);
UserGroupInformation.loginUserFromKeytab(user, keytab);
登录到Kerberized集群。 然后,该对象在未使用的情况下挂起数小时。超过10小时后(来自Kerberos集群的票证超时),下一个扫描表的调用将导致以下结果:

16/12/01 18:16:24 WARN security.UserGroupInformation: PriviledgedActionException as:bigdata-app-analyticscore-msr@INTQA.THOMSONREUTERS.COM (auth:KERBEROS) cause:javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
16/12/01 18:16:24 WARN ipc.RpcClient: Exception encountered while connecting to the server : javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
16/12/01 18:16:24 FATAL ipc.RpcClient: SASL authentication failed. The most likely cause is missing or invalid credentials. Consider 'kinit'.
- 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:211)
- etc.

如何保持Kerberos身份验证的有效性?

我之前碰巧在这个论坛上做了一些研究。此处的问题陈述(Kerberos身份验证在10小时后终止)与此线程的问题陈述几乎相同:

实际上,我今天早些时候刚刚编辑了这篇文章,并将“10小时”放在主题行中。这个帖子包含了一些关于在这里做什么的好建议。我将继续借用Samson Scharfrichter提供的好智慧,他在书中说:“标准解决方案是生成一个定期调用checktgtanderLoginFromKeyTab()的后台线程——请参阅HortonWorks大师(关于Hadoop和Kerberos的GitBook作者的同事)的详细解释。”


我希望这能为您提供指导。

我尝试设置一个计时器,每5分钟调用ugi.checktgtandrelogininfromkeytab(),但我遇到了同样的问题。奇怪的是,我还有其他进程可以长期打开HTable实例,但它们访问表的频率更高,不需要重新登录。下一步我将尝试使用计时器实际读取表中的数据,我认为我的问题是同一进程试图在同一会话中访问不安全和安全的集群。我们添加了代码,以确保在执行任何操作之前正确登录。如果没有这种情况,我相信在每一个操作之前检查TgtTandreloginFromKeyTab()就是解决方案;如果有的话,请告诉我们。