尽管生成了新令牌,但当HDFS令牌达到最大可更新时间时,风暴拓扑HDFS螺栓停止工作

问题描述

我在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 (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...