WebHDFS Java客户端无法正确处理Kerberos令牌

时间:2018-02-14 12:15:37

标签: java hadoop hdfs webhdfs

我试图运行一个长期存在的WebHDFS客户端(实际上是在HDFS上构建框架)。但是我的令牌在一天之后到期(此处默认为kerberos配置),起初我尝试运行一个可以调用的线程

userLoginInformation.currentUser().checkTGTAndReloginFromKeytab();

然而,即使我看到TGT重新登录21小时,但是24小时后,我的WebHDFS文件系统仍然停留在"标记在缓存中找不到" (这是一个错误,意味着服务器已经删除了我的令牌)。

在代码@ https://github.com/apache/hadoop/blob/release-2.7.1/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/web/WebHdfsFileSystem.java

中查看

我找到了方法" replaceExpiredDelegationToken"。但看了" runWithRetry"只有在" OPGETDELEGATIONTOKEN"失败(因为在所有其他操作中getRequireAuth都为FALSE),这基本上迫使我的客户每天至少运行一次getDelegationToken,所以我的令牌会被更新。

**现在我要检查FS是否是一个WebHDFS服务,然后,我每小时都会这样做:

if (hdfsFileSystem instanceof WebHdfsFileSystem)
{
  WebHdfsFileSystem tmpFS = (WebHdfsFileSystem) hdfsFileSystem;
  tmpFS.setDelegationToken(tmpFS.getDelegationToken(null));
}
  1. 是否有更好的方法强制授权令牌续订? (或拥有长寿客户)
  2. 谢谢!

1 个答案:

答案 0 :(得分:0)

经过两天的测试(所以kerberos门票将耗尽)

致电

if (hdfsFileSystem instanceof WebHdfsFileSystem)
{
  WebHdfsFileSystem tmpFS = (WebHdfsFileSystem) hdfsFileSystem;
  tmpFS.setDelegationToken(tmpFS.getDelegationToken(null));
}

每小时一次,似乎工作正常,IMO应该在HDFS级别完成但是......对于我们来说它将是@ framework级别:)