ApacheStorm:记住喷口的旧输出字段数

u7up0aaq  于 2021-06-21  发布在  Storm
关注(0)|答案(2)|浏览(416)

在将一个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);

谢谢

wwodge7n

wwodge7n1#

nimbus缓冲区中提交的拓扑 storm.local.dir . 您应该能够删除那里的缓冲拓扑(即,一个jar文件)。但要小心:删除“错误”的文件会中断拓扑的运行!

irlmq6kh

irlmq6kh2#

这个问题是因为我在storm目录中有一个相同程序的原始编译jar,它来自以前在测试集群设置时构建和部署的jar。
所发生的事情是,这个文件中的任何jar都是在启动nimbus时包含的,因此引用了这个旧jar,搞乱了一个已更改对象的序列化。您可以通过查看启动nimbus时传递的参数来查看。
注意不要把jar放在storm文件夹中,因为这可能会导致难以追踪的问题。

相关问题