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"(这是一个错误,意味着服务器已经删除了我的令牌)。
我找到了方法"replaceExpiredDelegationToken"。但是在查看 "runWithRetry" 之后,只有在 "OPGETDELEGATIONTOKEN" 失败时才会调用它(因为在所有其他操作中 getRequireAuth 为 FALSE),这基本上迫使我的客户每天至少一次 运行 getDelegationToken,所以我的令牌得到更新。
**现在我将检查 FS 是否是 WebHDFS 服务,然后每小时我会做:
if (hdfsFileSystem instanceof WebHdfsFileSystem)
{
WebHdfsFileSystem tmpFS = (WebHdfsFileSystem) hdfsFileSystem;
tmpFS.setDelegationToken(tmpFS.getDelegationToken(null));
}
- 是否有更好的方法来强制续订委托令牌? (或拥有长期客户)
谢谢!
经过两天测试(因此 kerberos 票证会 运行 关闭)
呼叫
if (hdfsFileSystem instanceof WebHdfsFileSystem)
{
WebHdfsFileSystem tmpFS = (WebHdfsFileSystem) hdfsFileSystem;
tmpFS.setDelegationToken(tmpFS.getDelegationToken(null));
}
每小时一次,它似乎工作正常,IMO 这应该在 HDFS 级别完成,但是好吧......对我们来说它将是@框架级别:)
我正在尝试 运行 一个长期存在的 WebHDFS 客户端(实际上是在 HDFS 上构建前端框架)。但是我的令牌一天后就会过期(这里是默认的 kerberos 配置),起初我尝试 运行ning 一个会调用
的线程userLoginInformation.currentUser().checkTGTAndReloginFromKeytab();
然而,即使我看到 TGT 重新登录 21 小时,但在 24 小时后我的 WebHDFS 文件系统卡在 "token not found in the cache"(这是一个错误,意味着服务器已经删除了我的令牌)。
我找到了方法"replaceExpiredDelegationToken"。但是在查看 "runWithRetry" 之后,只有在 "OPGETDELEGATIONTOKEN" 失败时才会调用它(因为在所有其他操作中 getRequireAuth 为 FALSE),这基本上迫使我的客户每天至少一次 运行 getDelegationToken,所以我的令牌得到更新。
**现在我将检查 FS 是否是 WebHDFS 服务,然后每小时我会做:
if (hdfsFileSystem instanceof WebHdfsFileSystem)
{
WebHdfsFileSystem tmpFS = (WebHdfsFileSystem) hdfsFileSystem;
tmpFS.setDelegationToken(tmpFS.getDelegationToken(null));
}
- 是否有更好的方法来强制续订委托令牌? (或拥有长期客户)
谢谢!
经过两天测试(因此 kerberos 票证会 运行 关闭)
呼叫
if (hdfsFileSystem instanceof WebHdfsFileSystem)
{
WebHdfsFileSystem tmpFS = (WebHdfsFileSystem) hdfsFileSystem;
tmpFS.setDelegationToken(tmpFS.getDelegationToken(null));
}
每小时一次,它似乎工作正常,IMO 这应该在 HDFS 级别完成,但是好吧......对我们来说它将是@框架级别:)