我有一个java应用程序需要访问Hadoop集群以定期获取文件(例如,每24小时)。
由于Kerberos协议已在该群集上启用保护,因此我使用UserGroupInformation类的loginUserFromKeytab()方法:https://hadoop.apache.org/docs/r1.2.1/api/org/apache/hadoop/security/UserGroupInformation.html。
现在,我知道kinit命令授予访问任何Kerberized服务的票证授予票证,并且必须定期刷新此票证(通过kinit命令)。现在,我的问题是,是否需要定期运行kinit(从代码中)与上述Java API结合运行代码?或者一次运行就足够了?或者根本不需要。
感谢阅读。
答案 0 :(得分:3)
没有。如果您使用具有有效密钥表和用户名的函数kinit
,则不需要定期从任何地方运行loginUserFromKeytab
。
来自docs
从keytab文件中记录用户。从keytab文件加载用户标识并将其登录。它们将成为当前登录的用户。
因此,每次使用有效参数调用方法loginUserFromKeytab
时。它登录用户。
答案 1 :(得分:3)
这是一个漫长而复杂的故事。简而言之:
loginUserFromKeytab()
的私有 Kerberos票证,则该票证不可续订;你必须不时启动一个后台线程来调用checkTGTAndReloginFromKeytab()
,它会在它到期时重新创建它一些推荐读物:
- HBase Kerberos connection renewal strategy
- Should I call ugi.checkTGTAndReloginFromKeytab() before every action on hadoop?
- Auto renewal of Kerberos ticket not working from Java (即UGI的非静态方法存在错误)