关于storm出现 NotSerializableException: java.io.BufferedWriter

错误代码:

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

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


**这主要是由于bolt和spout里面自己定义了私人的成员变量,并且实例化了,导致构造方法中没法初始化


private  person p = new person()

诸如这种现象

解决办法:

  1. 在spout和bolt的执行方法里new对象,但是不停调用NEW对象,会导致内存溢出,速度变慢,会变得超级慢,十几秒才2000次
    这里写图片描述
    1. 解决办法二,先private成null,在prepare中初始化,速度提升N倍不止
      这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值