Storm之Bolt-接口
IBolt:
bolt接口类,定义了常用的几个接口,IBolt的实现类在client上被创建,然后序列化到拓扑里并被提交到集群的master上,之后nimbus会启动worker进行反序列化,调用prepare进行准备完毕之后就开始处理tuples
如果是在java里定义bolts ,建议实现IRichBolt.java接口类,IRichBolt.java同时继承了IComponent.java接口,提供了更多对拓扑进行操作的方法。
/** * 当集群中的worker初始化一个跟当前Bolt相关的task时候被调用,此方法提供和准备bolt执行时的环境. * @param stormConf 此bolt使用的storm配置,合并了本机和集群的配置,将会提供给topology * @param context task的上下文,可以获取taskId,componentId,input,output等 * @param collector 用于任意时刻提交bolt里的tuples,collector是线程安全的,应当保存在Bolt里. */ void prepare(Map stormConf, TopologyContext context, OutputCollector collector); /** * 处理单个输入的tuple * 这里面使用OutputCollector来提交tuples. * 官方建议所有的输入tuples在处理完之后进行ack或者fail,否则storm无法判断该tuples是否被处理完毕 * 一般使用IBasicBolt,在execute方法中额外提供了outputCollector,会更加方便处理 * @param input */ void execute(Tuple input); /** * Bolt关闭的时候被调用,由于是被supervisor使用kill 9干掉的,所以并不保证cleanup会被执行 */ void cleanup();
IComponent.java
组件接口,所有的bolt和spout都可以视作组件 /** * 申明了当前组件的输出模式 * @param declarer 申明输出streamId,输出的field,判断一个output stream是否是direct stream */ void declareOutputFields(OutputFieldsDeclarer declarer); /** *获取组件配置. * @return */ Map<String, Object> getComponentConfiguration();
IRichBolt.java
跟IBolt接口相似,只是多继承了IComponent,多了申明输出和获取配置两个接口 IBasicBolt.java /** * 跟IBolt.java中作用类似,只是少了OutPutCollector */ void prepare(Map stormConf, TopologyContext context); /** * 跟Ibolt.java中作用类似,多了OutPutCollector */ void execute(Tuple input, BasicOutputCollector collector); void cleanup();

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Storm之LocalCluster.clj
此类初始化了一些配置参数,实现了ILocalCluster接口,将拓扑结构提交到nimbus,最终通过nimbus来执行 其中最重要的看 gen-class中定义了init的函数名为”init”,继承了ILocalCluster接口 下面看init函数: 定义了3种init函数 无参数 设置了TOPOLOGY-ENABLE-MESSAGE-TIMEOUTS,返回ret作为state String 和 Long 两个参数,分别制定zookeeper的Host和Port,返回ret作为state java中的Map,直接返回,将map当做state
- 下一篇
Storm之Collector-p1
IBasicOutputCollector.java List<Integer> emit(String streamId, List<Object> tuple); 提交一系列的tuple,返回接收到这些tuple的taskId void emitDirect(int taskId, String streamId, List<Object> tuple); 直接向某个task提交一系列的tuple BasicOutputCollector.java 这个类里封装了一个OutputCollector的代理和一个inputTuple OutputCollector是在构造函数里传入的,在Bolt处理完tuple之后调用此类的emit方法时,方法内部会调用封装的OutputCollector来进行emit, 最终的emit是OutputCollector的emit 此类还提供了两个emit方法的重载,目的是在没有指定streamId的时候提供一个默认名为“default”的streamId. 此类的emit方法没有提供anchors参数,每次bolt...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS关闭SELinux安全模块
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Hadoop3单机部署,实现最简伪集群