HBase Kerberos join更新策略


0

最近我在集群中启用了kerberos,在我的kerberos登录到期之前,一切都很正常,比如说12小时。在这一点上,我创建的任何 join,用这些 join创建的任何表等都将在我使用它们时抛出。这可能会使我的应用程序崩溃,具体取决于我如何处理它。

我不介意崩溃,因为我的应用程序是由slider管理的,如果应用程序宕机,slider会重新启动应用程序,但是只有在HBase被“使用”时才会发生这种情况(即,我在一个表上调用一个方法,该表的 join现在已过时),这可能是由用户交互引起的,这将导致用户体验不佳。

我不希望身份验证实现的细节渗透到我的应用程序中,也不希望创建 join对象的次数超过必要的次数,因为这是一个代价高昂的操作,需要进行大量的RPC调用(首先是zookeeper元数据位置)。

是否有一个通用的策略(最好内置在HBase客户机中)来管理kerberos身份验证到期并在发生这种情况时更新HBase join/表?

2 答案


0

Kerberos TGT有一个生存期(例如12h)和一个可更新的生存期(例如7天)。只要票证仍然有效并且仍然可以续签,您就可以请求“免费”续签—不需要密码—并重置生存期计数器(例如,再过12小时)。

Hadoop身份验证库生成一个特定的Java线程,用于自动更新当前TGT。使用kinit-R命令行而不是JAAS库调用有点难看,但是它可以 job ——请参阅HADOOP-6656

因此,如果你让Slider在启动时创建一个可更新的票证,并且如果你可以贿赂你的系统管理员将默认的(参见client conf)和最大的(参见KDC conf)可更新生存期提高到,比如说,30天,那么你的应用程序可以使用初始的TGT连续运行30天。不错的进步。

~~~~~~~~~~

如果你真的渴望永恒。。。抱歉,但实际上你还有一些程序要做。这意味着有一个专门的线程/进程负责或自动重新创建TGT。

    Java方式:在启动时,在 join到HBase/ HDFSS/whatever之前,

警告:如果其他线程在重新创建TGT时碰巧打开或重新打开了一个 join,该 join可能会失败,因为缓存在访问它的确切时间是空的(“竞争条件”)。下一次尝试将成功,但您的日志中可能会出现一些恶意警告。

~~~~~~~~~~

最后一点建议:您可以通过设置KRB5CCNAME环境变量为您的应用程序使用私有票证缓存(即,您可以在同一节点上使用相同的Linux帐户但不同的Kerberos主体运行多个应用程序),只要它是“FILE:”缓存即可。


0

因为这是一个老问题,最好知道HBase、Hadoop等的版本。

现在,Kerberos票证更新应该只在HBase中 job

请参阅配置步骤-

https://docs.cloudera.com/documentation/enterprise/5-14-x/topics/cdh_sg_hbase_authentication.html#concept_zyz_vg5_nt

请参阅配置为使用TGT续订的HBase client示例-

https://github.com/apache/hbase/blob/064f5f1394faa8e84ad64488345e3bf46629ce59/hbase examples/src/main/java/org/apache/hadoop/hbase/util/ClientUtils.java#L66

(顺便说一句,renewTGT=true是默认值,这实际上是Hadoop Commons代码库的一部分,请参见这里-

)


我来回答

写文章

提问题

面试题