java - 通过 Java 代码访问 Kerberized 服务时是否需要 kinit?

标签 java hadoop kerberos

我有一个 java 应用程序需要访问 Hadoop 集群以定期(例如,每 24 小时)获取文件。

由于启用了 Kerberos 协议(protocol)来保护该集群,我正在使用 UserGroupInformation 类的 loginUserFromKeytab() 方法:https://hadoop.apache.org/docs/r1.2.1/api/org/apache/hadoop/security/UserGroupInformation.html .

现在,我知道 kinit 命令会授予一个票证授予票证以访问任何 Kerberized 服务,并且必须定期刷新此票证(通过 kinit 命令)。现在,我的问题是,是否需要结合上述 Java API 定期(从代码)运行 kinit 才能使代码正常工作?还是运行一次就足够了?或者根本不需要。

感谢阅读。

最佳答案

这是一个漫长而复杂的故事。简而言之:

  • 如果您显式请求 Hadoop 身份验证库使用loginUserFromKeytab() 创建私有(private) Kerberos 票证,则该票证不可更新;您必须启动一个后台线程来不时调用 checkTGTAndReloginFromKeytab(),它会在接近到期时重新创建票证
  • 否则 UGI 将隐式读取共享票证缓存以获取现有票证;并且它还会隐式地启动一个后台线程来自动更新该票(只要它没有达到其更新结束时间——此时你就完蛋了)

一些推荐读物:
- 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 的非静态方法中存在错误)

关于java - 通过 Java 代码访问 Kerberized 服务时是否需要 kinit?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44362086/

相关文章:

java - Google App Engine SocketTimeout 异常

hadoop - HDFS AuthorizationException

kerberos - IBM Jdk 问题 Kerberos : Cannot authenticate keytab with credsType=both in JAAS

hadoop - 分布式系统中语义网的推理

web-services - Spnego Kerberos SOA UI 客户端错误

java - 如何正确更改复选框文本呈现行为?

java - 为什么我会收到这些“找不到合适的方法”错误?

java - String.intern() 如何工作以及它如何影响字符串池?

hadoop - 将数据写入 Hadoop

sql - HIVE SQL 将连续范围折叠成单行