org.apache.storm.zookeeper.server.NIOServerCnxnFactory - Thread Thread[main,5,main] died
java.lang.RuntimeException: java.io.NotSerializableException: java.io.BufferedWriter
at backtype.storm.serialization.DefaultSerializationDelegate.serialize(DefaultSerializationDelegate.java:43) ~[storm-core-0.9.3.jar:0.9.3]
at backtype.storm.utils.Utils.serialize(Utils.java:85) ~[storm-core-0.9.3.jar:0.9.3]
at
storm NotSerializableException统一解决方法:
不能在构造方法中初始化OutputStreamWriter(类似的对象),因为storm先初始化supervisor中的bolt对象,然后发送给worker,在调用prepare()方法
解决的办法就是,从supervisor发送到bolt这一步并不是初始化OutputStreamWriter类,可以先声明相关的对象,然后等发送到worker了以后,在bolt的prepare()里进行实例化,就可以避免此问题。下面是google来的一段话:
Thesupervisor instantiates the bolts, sends them to the workers, and then callsprepare() on all of them. Therefore, anything that isn't serializable that isinstantiated before prepare() causes this process to fail
Storm序列化问题
本文介绍了解决Apache Storm中因非序列化对象导致的问题。当在构造方法中初始化非序列化的对象如BufferedWriter时,会引发序列化异常。文章提供了一个解决方案:在supervisor将bolt对象发送给worker之后的prepare()方法中再实例化此类对象。
1178

被折叠的 条评论
为什么被折叠?



