通过java代码访问kerberized服务时需要kinit吗?

tnkciper  于 2021-06-01  发布在  Hadoop
关注(0)|答案(2)|浏览(458)

我有一个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并结合上面的javaapi才能使代码正常工作?或者运行一次就足够了?或者根本不需要。
谢谢你的阅读。

j13ufse2

j13ufse21#

这是一个漫长而复杂的故事。简而言之:
如果显式请求hadoop auth库创建私有kerberos票证 loginUserFromKeytab() ,则该票不可续签;必须启动后台线程才能调用 checkTGTAndReloginFromKeytab() 它会不时地重新创建一张快过期的票
否则,ugi将隐式读取共享票证缓存以获取现有票证;它还会隐式地启动一个后台线程来自动续订该票证(只要它没有到达续订时间的末尾——此时您就完蛋了)
一些推荐读物:
-hbase kerberos连接更新策略
-我应该在hadoop上的每个操作之前调用ugi.checktgtandreloginfromkeytab()吗?
-自动更新kerberos票证在java中不起作用(即ugi的非静态方法中有一个bug)

xytpbqjk

xytpbqjk2#

不,你不需要跑 kinit 如果您正在使用函数,则可以从任何位置定期执行 loginUserFromKeytab 使用有效的keytab和用户名。
来自文档
从keytab文件登录用户。从keytab文件加载用户标识并将其登录。他们将成为当前登录的用户。
所以每次你调用这个方法 loginUserFromKeytab 使用有效参数。它登录用户。

相关问题