storm拓扑hdfs-bolt在hdfs令牌达到最大可更新时间时停止工作,尽管生成了新的令牌

f87krz0w  于 2021-06-24  发布在  Storm
关注(0)|答案(0)|浏览(126)

我有一个在hdp平台上运行的storm拓扑(2.6.5.225-4)。已在我的群集上启用kerberos。
这个拓扑从kafkaspout开始,用一些bolt处理消息,然后用hdfsbolt将结果存储在hdfs中的文件中。
storm已配置为使用autohdfs处理具有以下属性的hdfs/kerberos:
hdfs.kerberos.principal文件
hdfs.keytab.file文件
nimbus.autocredential.plugins.classes类
nimbus.credential.renewars.classes类
nimbus.credential.renwers.freq.secs:23小时
我的拓扑配置也引用autohdfs
问题是hdfsbolt可以正常工作7天(hdfs委派令牌的最大可重新获得时间),但在第7天它会永久抛出: org.apache.hadoop.ipc.RemoteException: token (HDFS_DELEGATION_TOKEN token XXXX for <user>) can't be found in cache 但在nimbus方面,我可以看到调用autohdfs.dorenew()时,它检测到令牌不能再续费了:

[WARN] could not renew the credentials, one of the possible reason is tokens are beyond renewal period so attempting to get new tokens

然后nimbus得到了一个新的标记:

[INFO] Created HDFS_DELEGATION_TOKEN token YYYY for <user> on <my-hdfs>

但是,hdfsbolt始终抛出错误,永久引用旧的和现在过期的令牌x,而不是使用新的yyyyy令牌,因为x无法续订。
由于bolt工作了几天,因此kerberos/storm配置看起来是正常的,因为如果不是这样,它根本不会工作,并且令牌在最初的6天内被正确地续订,因此调用了令牌续订。
在处理拓扑中的元组期间,还有一个hbase bolt正在写入安全的hbase。autohbase每23小时正确更新一次,hbase令牌无法更新,因此autohbase的renew()实现是获取一个新的令牌并将其推送到拓扑中;就像autohdfs在hdfs令牌超出续订时间或第一次获取时使用自己的令牌一样。
有人能解释为什么hdfs螺栓在7天后停止工作,并且仍然引用旧的令牌,尽管nimbus正在获取一个新的令牌?
谢谢

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题