在Storm配置中注册序列化程序

时间:2013-05-29 06:27:59

标签: scala apache-storm

我想在我的风暴拓扑中注册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

1 个答案:

答案 0 :(得分:0)

您使用的是什么版本,您不清楚。

这是一个错误,因为scala特殊情况下小地图,并且因为Storm默认需要注册,最后因为不知何故,默认的地图序列化器没有被选中:

https://github.com/twitter/chill/blob/develop/chill-scala/src/main/scala/com/twitter/chill/KryoSerializer.scala#L108

我添加了一个问题: 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