将spouts声明从一个字段输出更改为两个字段后,集群似乎还记得它以前的输出声明。例如
declarer.declare(new Fields("userTask"));
declarer.declare(new Fields("tupleTrackingId","userTask"));
该喷嘴已序列化。这也被记住了。
日志中的错误状态
Tuple created with wrong number of fields. Expected 1 fields but got 2 fields
但是现在它有了新的声明。
有办法清除风暴集群的历史记录吗?或者清除历史生成的序列化对象?
如果这是另一个问题?
为了完整起见,这里是喷口输出。
outputCollector.emit(new Values(msgID, task), msgID);
谢谢
Nimbus buffers在storm.local.dir
中提交拓扑。您应该能够删除那里的缓冲拓扑(即jar文件)。但是要小心:删除"错误"的文件会中断拓扑的运行!
问题是因为我在storm目录中有一个相同程序的原始编译jar,来自之前的构建和部署,当测试集群设置时。
发生的情况是,在启动Nimbus时,该文件中的任何jar都包含在其中,因此有对这个旧jar的引用,从而混淆了更改对象的序列化。您可以通过查看启动Nimbus时传递的参数来查看这一点。
要注意不要将jar放在Storm文件夹中,因为这可能会导致难以追踪的问题。