我试图运行一个长期存在的WebHDFS客户端(实际上是在HDFS上构建框架)。但是我的令牌在一天之后到期(此处默认为kerberos配置),起初我尝试运行一个可以调用的线程
userLoginInformation.currentUser().checkTGTAndReloginFromKeytab();
然而,即使我看到TGT重新登录21小时,但是24小时后,我的WebHDFS文件系统仍然停留在"标记在缓存中找不到" (这是一个错误,意味着服务器已经删除了我的令牌)。
中查看我找到了方法" replaceExpiredDelegationToken"。但看了" runWithRetry"只有在" OPGETDELEGATIONTOKEN"失败(因为在所有其他操作中getRequireAuth都为FALSE),这基本上迫使我的客户每天至少运行一次getDelegationToken,所以我的令牌会被更新。
**现在我要检查FS是否是一个WebHDFS服务,然后,我每小时都会这样做:
if (hdfsFileSystem instanceof WebHdfsFileSystem)
{
WebHdfsFileSystem tmpFS = (WebHdfsFileSystem) hdfsFileSystem;
tmpFS.setDelegationToken(tmpFS.getDelegationToken(null));
}
谢谢!
答案 0 :(得分:0)
经过两天的测试(所以kerberos门票将耗尽)
致电
if (hdfsFileSystem instanceof WebHdfsFileSystem)
{
WebHdfsFileSystem tmpFS = (WebHdfsFileSystem) hdfsFileSystem;
tmpFS.setDelegationToken(tmpFS.getDelegationToken(null));
}
每小时一次,似乎工作正常,IMO应该在HDFS级别完成但是......对于我们来说它将是@ framework级别:)