Storm UI界面上出现的Spout Failed 问题解决方案!!!

3 篇文章 0 订阅
2 篇文章 0 订阅
这个问题比较麻烦!定位了很久(至少花了我10天左右的时间)才解决此问题!
出现此问题的原因是:
spout在默认超时时间(30s)内发射出去的Tuple没有被bolt处理就会出现spout failed。
尝试解决问题的过程:
1、调整bolt的worker、executor、task数目,希望能够解决问题。结果失败!
2、调整修改默认超时时间(topology.message.timeout.secs)为60s,修改spout的缓存队列(topology.max.spout.pending)由于我的数据量不大,每天处理数据也就最多500M,把它设置成200,由于我设置spout的并发度为5,所以可以暂存1000条tuple(spout数 乘以 topology.max.spout.pending)。结果过了几个小时还是出现Spout Failed!
3、好吧,我再观察storm ui界面,发现有两个bolt延时较大(超过1s),网上看了许多资料,最终判定是bolt处理延时过高,处理速度缓慢,导致spout发射的Tuple堆积过多,很多Tuple在超时时间内没有被bolt处理,因此发生Spout Failed的惨剧!
解决办法:
1)找出bolt哪里耗时最多!在代码里面一步一步打印出时间,比如对数据进行过滤的代码处理用了多长时间,入库用了多长时间...
2)后来我发现,数据插入到hbase里面耗时最大!!!几乎达到1s,而且我是一条一条数据进行插入的!
怎么办呢?想要减小bolt延时必然需要解决hbase插入数据耗时较大的问题,于是我想到对数据进行批量插入,比如说来了100条Tuple才执行插入操作。因此这100条Tuple需要暂时存放在一个地方,我想到的是用arraylist暂时存放数据。最后运行一下修改后的代码,发现问题应该被解决了。
4、未用批量插入和批量插入数据后的区别
1)未用批量插入

2)使用批量插入后



Spout Failed 问题算是解决了!










  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值