Apache Storm:记住spout的旧输出字段数



将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文件夹中,因为这可能会导致难以追踪的问题。

最新更新