立即注册 登录
About云-梭伦科技 返回首页

einhep的个人空间 https://www.aboutyun.com/?1418 [收藏] [复制] [分享] [RSS]

日志

spout Failed 问题失败分析及解决方案

已有 1311 次阅读2017-4-26 14:59 | 解决方案, Failed

这个问题比较麻烦!定位了很久(至少花了我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 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

关闭

推荐上一条 /2 下一条