Storm集群模式下cleanup解决方法
2017-05-05 18:13
337 查看
背景
由于cleanup方法并不可靠,它只在local mode下生效,Storm集群模式下cleanup不会被调用执行。很多资源得不到释放
解决方案
在kill topology之前,先deactivate相应的topology。在spout中实现deactivate()方法,deactivate()方法中给bolt emit特殊的数据(如:emit “shutDown”字符串给bolt),bolt中判断接收的数据为”shutDown”就调用cleanup()方法。在cleanup()方法中释放需要释放的资源。
流程图
![](http://img.blog.csdn.net/20170505180546202?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbmdrZXpoaV80NzE4ODU4ODk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
相关代码
spout重写deactivate()方法代码如下:
注意事项: deactivate topology时,建议等待时间尽量长,时间过短消息来不及处理,会导致数据丢失
由于cleanup方法并不可靠,它只在local mode下生效,Storm集群模式下cleanup不会被调用执行。很多资源得不到释放
解决方案
在kill topology之前,先deactivate相应的topology。在spout中实现deactivate()方法,deactivate()方法中给bolt emit特殊的数据(如:emit “shutDown”字符串给bolt),bolt中判断接收的数据为”shutDown”就调用cleanup()方法。在cleanup()方法中释放需要释放的资源。
流程图
相关代码
spout重写deactivate()方法代码如下:
@Override public void deactivate(){ LOGGER.info("deaactivate to spout and bolt"); try { //storm deactivate时发一条消息给bolt collector.emit(new Values("shutDown")); } catch (Exception e) { e.printStackTrace(); } }
bolt中execute()方法代码如下:
@Override public void execute(Tuple input) { String message = input.getStringByField("loan_message"); //判断是不是spout的deactivate传过来的消息 if("shutDown".equals(message )) { cleanup(); } }
注意事项: deactivate topology时,建议等待时间尽量长,时间过短消息来不及处理,会导致数据丢失
相关文章推荐
- cluster模式下storm kill topology时做cleanup的解决方法
- 大数据_Storm_cluster模式下storm kill topology时做cleanup的解决方法
- 大数据_Storm_cluster模式下storm kill topology时做cleanup的解决方法
- freebsd重启后每次进入单用户 (single-user)模式的解决方法
- window 7 运行asp.net程序出错-IIS7.0 检测到在集成的托管管道模式下不适用的ASP.NET设置 的解决方法
- .net 使用提取模式使用SQL创建报表 出现“您请求的报表需要更多信息.”的解决方法
- asp.net 2.0不能切换到Desgine模式的解决方法
- 解决SPS平台列表视图切换为数据表模式错误解决方法
- Vista 在电源供电的情况下 无法立即进入待机模式,而是进入离开模式 的解决方法
- ORA-00265: 要求实例恢复, 无法设置 ARCHIVELOG 模式的解决方法
- word2003文档打不开强行进入安全模式的解决方法
- 【转】模式窗口window.open造成Session丢失的解决方法
- Sql server出现“当前事务处在流水模式”的解决方法
- IIS7.0 “检测到在集成的托管管道模式下不适用的ASP.NET设置”解决方法
- SVN提交时出错,重新提交提示locked,Cleanup清理失败问题的解决方法
- Word遇到错误以安全模式打开的解决方法
- 模式窗口window.open造成Session丢失的解决方法
- "此页当前禁用指定的显示模式。请确保为当前用户启用了个性化设置"的解决方法
- OpenID与传统Email用户身份认证模式整合时的安全问题和解决方法
- 在配置win7 IIS浏览网站时 检测到在集成的托管管道模式下不适用的ASP.NET设置 的解决方法