2013-06-04 3 views
3

У меня была рабочая топология Storm, которую я настраивал, добавив хук задачи, и теперь я получаю сообщение о том, что моя конфигурация не является json-serializable. Ошибка возникает, когда топология отправляется в LocalCluster.Захват задачи, похоже, не JSON-сериализуемый

Я подозреваю, что проблема заключается в том, что я неправильно настраиваю задачу. В моем классе водителя топологии, прежде чем я представить топологию я это делаю:

config.put(config.TOPOLOGY_AUTO_TASK_HOOKS, new RubeGoldbergTaskHook()); 

Где конфигурация имеет тип backtype.storm.Config, и RubeGoldbergTaskHook расширяет BaseTaskHook

Am Я не устанавливая конфигурации. TOPOLOGY_AUTO_TASK_HOOKS правильно или мне нужно изменить класс RubeGoldbergTaskHook для JSON-сериализации?

ответ

2

Использовать таким образом. Он будет работать ...

List<String> hooksList= new ArrayList<String>(); 
hooksList.add(RubeGoldbergTaskHook.class.getName()); 
conf.put(Config.TOPOLOGY_AUTO_TASK_HOOKS, hooksList); 
1

В случае, если вы хотите использовать экземпляр Java в карте конфигурации, есть альтернатива: вы можете сериализовать в Kryo (как это предусмотрено с Бурей) на байты массив, а затем преобразовать его в базовую 64-строчную строку. Таким образом, вы сможете десериализовать любой экземпляр java из конфигурации шторма в любом болте. Надеюсь, что это полезно.