webhdfs java客户端未正确处理kerberos令牌

kd3sttzy  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(389)

我正在尝试运行一个长寿命的webhdfs客户机(实际上是在hdfs上构建框架)。但是我的令牌在一天后过期(这里是默认的kerberos配置),一开始我尝试运行一个线程来调用

userLoginInformation.currentUser().checkTGTAndReloginFromKeytab();

然而,即使我在21小时后看到tgt重新登录,但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));
}

有没有更好的方法来强制授权令牌更新(或拥有长期客户)
谢谢!

jv4diomz

jv4diomz1#

经过两天的测试(这样kerberos票证就会失效)
打电话

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

每小时一次,它似乎工作良好,我认为这应该在hdfs的水平,但很好。。。对于我们来说,它将是@framework level:)

相关问题