Bolt是Topology中数据处理的基本单元,也是Storm针对处理过程的编程单元。Topology中所有的处理都是在这些bolt中完成的。 Bolt可以将数据项发送至多个数据流(Stream)。编程人员首先可以使用OutputFieldsDeclarer类的declareStream()方法声明多个流,指定数据将要发送到的流,然后使用SpoutOutputCollector的emit方法将数据发送(原生spout)。

Storm为Bolt提供的编程抽象,以接口的形式,面向接口的编程风格。其中IRichBolt是使用Java语言实现Bolt最主要的接口。事实上,IRichBolt本身并未提供更多属性或方法,只是扩展了(extends)另外两个接口IBolt和IComponent。

IRichBolt是使用Java语言实现Bolt最主要的接口,拓展了(extends)另外两个接口IBolt和IComponent.。接口包含的方法有prepare(in stormConf,in context,in collector):void,execute(in tuple) :void,cleanup():void。最重要的方法是execute(),该方法接收一个数据项作为输入。Bolt可以将处理后的结果作为新的Tuple,使用OutputCollector对象的emit()方法发送。Bolt可以在OutputCollector中对每一个发送数据项调用ack()方法,使得storm能够追溯这个数据项是否被完整处理。

IBolt和IComponent接口

1、prepare()与cleanup()      void prepare(java.util.Map.stormConf,TopologyContext context,OutputCollector collector)

   prepare()用于实例化Bolt的一个运行时任务,被集群中某一进程调用,提供Bolt运行的环境。prepare()方法三个参数:stormConf,context,collector.

    (1)sotrmConf对象维护Storm中针对该Bolt的配置信息。这些配置信息是Topology提供的,被集群中运行该Bolt的机器使用。

    (2)context上下文对象,用于获取该组件运行时任务的信息。

    (3)collector对象用于从该Bolt发送数据项。

2、execute()

    该方法用于Bolt从Topology中接收一个数据项(Tuple),并可以将处理的结果作为新的数据项发送(emit),是Bolt需要实现的最重要的方法。这个方法的参数input是一个数据项对象,它包含了众多的元数据(metadata),包括它来自的组件、流、任务等。数据项中的值,可以通过Tuple类的getValue()方法获得。处理结果的发送是通过在prepare()方法中提供的OutputCollector对象,调用emit方法实现。

3、IBasicBolt和BaseBasicBolt

    在许多场景下Bolt的数据处理,都需要确认处理完成或认定失败。需要代码emit数据和调用ack/fail。Storm提供了另一个用来实现Bolt的接口IBasicBolt,用于该接口的实现类,会在执行execute方法之后自动调用ack方法。

  

最新文章

  1. inno 实现水波特效
  2. 【简易版】IOS仿periscope自制狂赞飘桃心
  3. C#中(int)a和Convert.ToInt32(a)有什么区别
  4. POJ 2635 The Embarrassed Cryptographer
  5. 【Android】应用程序Activity启动过程分析
  6. 原生Android动作
  7. jQuery的.click,.bind,.unbind,.on,.off,.delegate,.undelegate
  8. phpQuery轻松采集网页内容
  9. [转]Delphi : keydown与keypress的区别,组合键
  10. yii2之数据验证
  11. Failed to connect to VMware Lookup Service……SSL certificate verification failed
  12. idea 打开自动编译以及查看Problem窗口
  13. 以太坊ERC20代币开发
  14. 第29月第27天 Error: Multiple commands produce
  15. Codeforces 947F. Public Service 构造
  16. T2027 蜈蚣
  17. IDEA overwrite报错、languagelevel设置不生效问题
  18. Kubernetes 新时代的宠儿
  19. Object.defineProperty方法
  20. openxml excel封装类

热门文章

  1. IT的灵魂是流程,流程的灵魂是业务,业务的灵魂是战略
  2. 连接英文字符集的ORACLE和调用存储过程问题及64位服务器连接ORACLE问题
  3. Hibernate createCriteria查询详解
  4. iOS开发UI篇—无限轮播(功能完善)
  5. python语法------时间函数
  6. NOIP 2015 BZOJ 4326 运输计划 (树链剖分+二分)
  7. python操作excel表格详解(xlrd/xlwt)
  8. Android TextView里显示两种颜色
  9. poj1502 spfa最短路
  10. zip函数