问题描述
我在HDP平台(2.6.5.225-4)上运行了Storm拓扑。 在我的群集上启用了Kerberos。
此拓扑以KafkaSpout开头,使用一些螺栓处理消息,然后使用HDFSBolt将结果存储在HDFS中的文件中。
Storm已配置为使用AutoHDFS处理具有以下属性的HDFS / Kerberos:
- hdfs.kerberos.principal
- hdfs.keytab.file
- nimbus.autocredential.plugins.classes
- nimbus.credential.renewers.classes
- nimbus.credential.renewers.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始终永久引用旧的且已过期的令牌XXXX抛出错误,而不是使用由于无法更新XXXX而生成的新的YYYY令牌。
由于螺栓已经工作了几天,所以看起来Kerberos / Storm配置还可以,因为否则它根本无法工作,并且令牌在开始的前6天已正确更新,因此调用了令牌更新。
在拓扑中处理元组的过程中,还会有一个HBASE螺栓写入安全的HBase。 AutoHBase会每23H令牌正确更新一次,并且不能更新HBase令牌,因此AutoHBase的renew()实现是获取一个新令牌并将其推送到拓扑中。就像当HDFS令牌超出续约时间或第一次获取它时,AutoHDFS会使用其自己的令牌一样。
有人可以向我解释为什么HDFS螺栓在7天后会停止工作,尽管Nimbus提取了一个新令牌但仍引用旧令牌吗?
Thx
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)