在将一个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);
谢谢
2条答案
按热度按时间wwodge7n1#
nimbus缓冲区中提交的拓扑
storm.local.dir
. 您应该能够删除那里的缓冲拓扑(即,一个jar文件)。但要小心:删除“错误”的文件会中断拓扑的运行!irlmq6kh2#
这个问题是因为我在storm目录中有一个相同程序的原始编译jar,它来自以前在测试集群设置时构建和部署的jar。
所发生的事情是,这个文件中的任何jar都是在启动nimbus时包含的,因此引用了这个旧jar,搞乱了一个已更改对象的序列化。您可以通过查看启动nimbus时传递的参数来查看。
注意不要把jar放在storm文件夹中,因为这可能会导致难以追踪的问题。