我想在我的风暴拓扑中注册Scala集合的序列化程序。我正在使用twitter chill KryoSerializer来实现此目的。
我在做什么是
1.创建了一个实现IKryoDecorator的装饰器。在装饰方法中,我称之为KryoSerializer.registerAll(k),其中k是Kyro实例
2.在拓扑配置对象中,我调用registerDecorator方法。
import com.twitter.chill.KryoSerializer
import com.esotericsoftware.kryo.Kryo
import backtype.storm.serialization.IKryoDecorator
class KryoDecorator extends IKryoDecorator {
def decorate(k: Kryo) {
KryoSerializer.registerAll(k)
}
}
然后
stormConfig.registerDecorator(classOf[ReflexKryoDecorator])
当我运行拓扑时,我得到异常,说明“类未注册:scala.collection.immutable.Map $ Map3”
Storm版本0.8.2 寒冷版0.2.3
答案 0 :(得分:0)
您使用的是什么版本,您不清楚。
这是一个错误,因为scala特殊情况下小地图,并且因为Storm默认需要注册,最后因为不知何故,默认的地图序列化器没有被选中:
我添加了一个问题: https://github.com/twitter/chill/issues/60
要解决此问题,请将注册设置为可选,如下所示: https://github.com/twitter/chill/blob/develop/chill-scala/src/main/scala/com/twitter/chill/KryoBijection.scala#L38