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

WebHDFS Java client not handling Kerberos Tokens correctly

我正在尝试 运行 一个长期存在的 WebHDFS 客户端(实际上是在 HDFS 上构建前端框架)。但是我的令牌一天后就会过期(这里是默认的 kerberos 配置),起初我尝试 运行ning 一个会调用

的线程
userLoginInformation.currentUser().checkTGTAndReloginFromKeytab();

然而,即使我看到 TGT 重新登录 21 小时,但在 24 小时后我的 WebHDFS 文件系统卡在 "token not found in the cache"(这是一个错误,意味着服务器已经删除了我的令牌)。

看里面的代码@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. 是否有更好的方法来强制续订委托令牌? (或拥有长期客户)

谢谢!

经过两天测试(因此 kerberos 票证会 运行 关闭)

呼叫

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

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