我有一个工作的Storm拓扑,我通过添加一个任务钩子来调整,现在我收到一个错误,说我的配置不是json-serializable。将拓扑提交到LocalCluster时会发生错误。
我怀疑我的问题是我没有正确配置任务挂钩。在我的拓扑驱动程序类中,就在我提交拓扑之前,我执行此操作:
config.put(config.TOPOLOGY_AUTO_TASK_HOOKS, new RubeGoldbergTaskHook());
其中config的类型为backtype.storm.Config, 和RubeGoldbergTaskHook扩展了BaseTaskHook
我没有正确设置config.TOPOLOGY_AUTO_TASK_HOOKS属性,还是需要将RubeGoldbergTaskHook类修改为JSON可序列化?
答案 0 :(得分:2)
以这种方式使用。 它会起作用......
List<String> hooksList= new ArrayList<String>();
hooksList.add(RubeGoldbergTaskHook.class.getName());
conf.put(Config.TOPOLOGY_AUTO_TASK_HOOKS, hooksList);
答案 1 :(得分:1)
如果您确实想在配置映射中使用java实例,还有另一种选择:您可以将kryo(因为它提供了Storm)序列化为字节数组,然后将其转换为基本64字符串。这样,您就可以在任何螺栓中从风暴配置反序列化任何Java实例。希望它有用。