我绝望地试图配置序列化程序示例,以便在我的storm拓扑中使用。
storm文档说明,有两种方法可以注册序列化程序:
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
关于拓扑提交。
有人知道怎么做吗(注册序列化程序示例)?
非常感谢你
2条答案
按热度按时间ql3eal8s1#
正如steven magana zook在上面所说的,您希望在配置中注册类。这显然不允许您传入参数,但是如果您查看storm源代码中的serializationfactory.java,您可以看到它解析了序列化程序类的各种可能的构造函数,包括几个包含storm配置的构造函数。你可以把你的参数藏在里面。
所以不是你所希望的,而是你应该能达到同样的目的。
8ehkhllq2#
backtype.storm.config类中有一个方法可以注册从序列化程序派生的类。
对于您的示例,请将其放在创建和提交拓扑的main方法中: