storm组件初始化问题及与spring的结合方式
来源:互联网 发布:阿里云 挂载数据盘 编辑:程序博客网 时间:2024/05/21 08:47
一般来说spout/bolt的生命周期如下:
1.在提交了一个topology之后(是在nimbus所在的机器么?), 创建spout/bolt实例(spout/bolt在storm中统称为component)并进行序列化.
2.将序列化的component发送给所有的任务所在的机器 ,序列化是对实体对象序列化而不是类,所以在这之前component一定是实例化完成,而component中的初始化数据最好在prepare中完成,而不要在component,如果在component中初始化数据因为同样会被序列化,容易出错。
3.在每一个任务上反序列化component.
4.在开始执行任务之前, 先执行component的初始化方法(bolt是prepare, spout是open).
1.在提交了一个topology之后(是在nimbus所在的机器么?), 创建spout/bolt实例(spout/bolt在storm中统称为component)并进行序列化.
2.将序列化的component发送给所有的任务所在的机器 ,序列化是对实体对象序列化而不是类,所以在这之前component一定是实例化完成,而component中的初始化数据最好在prepare中完成,而不要在component,如果在component中初始化数据因为同样会被序列化,容易出错。
3.在每一个任务上反序列化component.
4.在开始执行任务之前, 先执行component的初始化方法(bolt是prepare, spout是open).
因此component的初始化操作应该在prepare/open方法中进行, 而不是在实例化component的时候进行.
将storm与spring结合
要在每个spout/bolt维护自己的ApplicationConext, 于是将一个all in one 的spring打散成spring-spout.xml, spring-bolt-xxx.xml. 然后在open/prepare方法中加载对应的spring配置文件.
在通过main函数提交topo之前,将storm相关的配置信息通过yaml文件对应类传入到bolt中,在某一个数据库连接池的公共类中同样需要相关的配置信息,因为业务和测试需求的便捷性,便将相关配置也放入了yaml中。起初是在main函数里面进行该公共类的初始化,即将相关的config信息传入,在单bolt的情况下测试没有问题,便发布到服务器并配置多个bolt,由此就引发了一个空指针的异常。
后来在了解了storm 中bolt/spout的生命周期后,才理解了为什么会出现空指针。
0 0
- storm组件初始化问题及与spring的结合方式
- storm的序列化问题及与spring的结合方式
- storm和spring的结合
- spring与jdbc结合的方式
- Spring学习心得(21)-- spring与jdbc结合的方式
- storm与kafka结合
- spring与hibernate3结合,DataSource的配置方式(一)
- spring与hibernate3结合,DataSource的配置方式(二)
- XFire与Spring结合的几种方式
- XFire与Spring结合的几种方式
- MyBatis与Spring结合的几种方式
- MyBatis与Spring结合的几种方式
- Storm 简介及组件的基本概念
- spring 初始化 Bean的方式及相关应用
- dwr结合spring例子及出现的相关问题
- Storm的编程模型与核心组件
- Storm的编程模型与核心组件
- storm与spring框架集成问题
- Server responded" Algorithm negotiation failed"
- cf 768 D. Jon and Orbs(概率DP)@
- 一些常用技术网站
- python 多线程为什么鸡肋?
- 静态内部类实现单例设计模式
- storm组件初始化问题及与spring的结合方式
- 持久化存储——Redis简介
- C++第2次实验-实验报告(1)
- clipChildren属性
- Android学习笔记之动画简介
- 团队融洽之拓展器械拓展训练
- Linux命令学习
- Builder设计模式
- 关于MFC中OpenCV图像处理使用cvFindContours引起的中断错误