Apache Storm:记住 spout 的旧输出字段数
Apache Storm: Remembering old number of output fields for 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
但现在有了新的声明。
问题
有没有办法清除风暴集群的历史记录?或者清除历史生成的序列化对象?
或者如果这是另一个问题?
为了理智,这里是 spout 输出。
outputCollector.emit(new Values(msgID, task), msgID);
谢谢
Nimbus 缓冲区在 storm.local.dir
中提交了拓扑。您应该能够删除那里的缓冲拓扑(即 jar 文件)。 但要小心:删除"wrong"个文件会中断运行个拓扑!
这个问题是因为我在 storm 目录中有一个相同程序的原始编译 jar,来自之前在测试集群设置时的构建和部署。
当启动 Nimbus 时,此文件中的任何 jar 都被包含在内,因此引用了这个旧 jar,搞乱了已更改对象的序列化。您可以通过查看启动 Nimbus 时传递的参数来查看。
注意事项
不要将罐子放在 Storm 文件夹中,因为这可能会导致难以追踪的问题。
将 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
但现在有了新的声明。
问题 有没有办法清除风暴集群的历史记录?或者清除历史生成的序列化对象?
或者如果这是另一个问题?
为了理智,这里是 spout 输出。
outputCollector.emit(new Values(msgID, task), msgID);
谢谢
Nimbus 缓冲区在 storm.local.dir
中提交了拓扑。您应该能够删除那里的缓冲拓扑(即 jar 文件)。 但要小心:删除"wrong"个文件会中断运行个拓扑!
这个问题是因为我在 storm 目录中有一个相同程序的原始编译 jar,来自之前在测试集群设置时的构建和部署。
当启动 Nimbus 时,此文件中的任何 jar 都被包含在内,因此引用了这个旧 jar,搞乱了已更改对象的序列化。您可以通过查看启动 Nimbus 时传递的参数来查看。
注意事项 不要将罐子放在 Storm 文件夹中,因为这可能会导致难以追踪的问题。