2014-10-20 5 views
3

Я отчаянно пытаюсь настроить экземпляры serializer для использования в моей топологии шторма.Как зарегистрировать экземпляры сериализатора крио в шторме?

шторма документации говорится, есть 2 способа регистрации сериализаторы:

1. The name of a class to register. In this case, Storm will use Kryo’s FieldsSerializer to serialize the class. This may or may not be optimal for the class – see the Kryo docs for more details. 
2. A map from the name of a class to register to an implementation of com.esotericsoftware.kryo.Serializer. 

Я хочу использовать 2. ->

Map<String, Object> serializerConfig = new HashMap<String, Object>(); 
serializerConfig.put(Record.class.getName(), new AvroSerializer(params)); 
conf.put(Config.TOPOLOGY_KRYO_REGISTER, serializerConfig); 

К сожалению, это результаты в

Exception in thread "main" java.lang.IllegalArgumentException: Storm conf is not valid. Must be json-serializable 

по представлению топологии.

Кто-нибудь знает, как это сделать (зарегистрировать экземпляры сериализатора)?

Большое спасибо

+0

Как вы отправляете свою топологию? код. – Chiron

+0

StormSubmitter.submitTopology (топологияName, conf, топология); – Patrick

+0

Кстати, AvroSerializer - это моя собственная реализация (KryoSerializer) – Patrick

ответ

2

Существует method in the backtype.storm.Config class зарегистрировать свой собственный класс, производный от Serializer.

Для примера, поместите это в основной метод, который создает и представляет топологию:

// Read in Storm Configuration 
Config conf = new Config(); 
conf.registerSerialization(Record.class, AvroSerializer.class); 
+2

мой вопрос должен быть: «Как зарегистрировать INSTANCE для сериализатора крио». Как вы действительно передаете параметры своим сериализаторам? – Patrick

+0

@Patrick Не зная подробностей о вашем конкретном случае, возможно ли, чтобы вы сами поставили параметры в конфигурации бури и получили код сериализатора? –

1

Как было сказано выше Стивен Magana-Зук, который вы хотите зарегистрировать класс в конфигурации, как он сделал. Это, по-видимому, не позволяет вам передавать параметры, но если вы посмотрите в SerializationFactory.java в источнике шторма, вы увидите, что он разрешает различные возможные конструкторы вашего класса сериализатора, включая несколько, которые содержат штормовой Config. Вы можете закрепить свои параметры там.

Не то, на что вы надеялись точно, но вы должны быть способны достичь того же конца.