storm ui界面上出现的spout Failed 问题解决方案!!!

来源:互联网 发布:软件测试的基础知识 编辑:程序博客网 时间:2024/06/01 12:28
这个问题比较麻烦!定位了很久(至少花了我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)未用批量插入
storm <wbr>ui界面上出现的spout <wbr>Failed <wbr>问题解决方案!!!


2)使用批量插入后
storm <wbr>ui界面上出现的spout <wbr>Failed <wbr>问题解决方案!!!


Spout Failed 问题算是解决了!
阅读全文
0 0
原创粉丝点击