Storm API(ISpout,IComponent,IBolt)

13 篇文章 0 订阅

1.ISpout

ISpout是一个核心接口,用于将数据以Tuple方式发送至topology去执行,每个Tuple都会通过一个spout发射出去,storm将会跟踪整个DAG,当storm发现每个Tuple都被成功处理了,那么他就会发送一个ack数据给Spout.

如果Tuple执行失败,他就会在topology配置一个timeout,storm会把错误信息发送给Spout
当一个spout发送一个Tuple时,他就会给Tuple赋上一个标签(message id),这个标签可以是任意类型,当storm发送一个ack(成功)或者fails(失败)消息时,他就会将message id回传过来以鉴别Tuple是哪一个.

Storm会在同一个线程下调用executes ack, fail, 和nextTuple方法,这意味着实现者
ISpout不需要担心这些方法之间的并发问题

核心方法:

  1. open
    初始化时调用
    参数:(Map conf, TopologyContext context, SpoutOutputCollector collector)
    Map conf: 放spout配置(configuration)
    TopologyContext context: 上下文
    SpoutOutputCollector collector: 用于发送

  2. close
    当Ispout关闭时调用
    不会保证一定会被调用

  3. activate

  4. deactivate

  5. nextTuple
    storm通过collector发送数据时会被调用

  6. ack
    tuple处理成功,strom会反馈给spout一个成功消息

  7. fail
    tuple处理失败,strom会反馈给spout一个失败消息

实现类:

  1. BaseRichSpout(最常用)
    继承了BaseComponent,实现了IRichSpout

  2. DRBCSpout

  3. ShellSpout

2.IComponent

这是一个常用方法,在所有topology有关的组件,这个借口会在在java api中使用
他实现了一个Serializable(java.io)接口
核心方法:

  1. declareOutputFields
    声明输出字段,用于声明当前spout/bolt发送的tuple名称

  2. getComponentConfiguration
    获取组件配置

3.IBolt

一个IBolt代表一个组件,组件用于接收tuple数据并进行处理,他不会立刻处理数据,而是要先拿出tuple数据然后进行处理

生命周期:
在客户端计算机上创建的IBolt对象。IBolt被序列化到topology中(使用Java序列化)并提交到集群的主计算机(Nimbus).然后Nimbus启动反序列化对象的workers,调用prepare,然后开始处理元组。

核心方法:

  1. prepare
    预备方法,类似于ISPout中的open,参数于open一致,他会提供IBolt的运行时环境

  2. execute
    他会处理每一个tuple,tuple包括了元数据(来源,value),这个tuple应该能使用OutputCollector发射出去
    ,这个东西已经在prepare中准备好了

  3. cleanup
    清理操作

实现类:

  1. BaseRichBolt
    继承了BaseComponent,实现了IRichBolt,BaseComponent继承了IComponent
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值