storm开发总结【二】

来源:互联网 发布:淘宝qq飞车包车 编辑:程序博客网 时间:2024/04/30 11:46

这一部分来讲讲实际开发中,Spout与Bolt模块的开发。

一、spout

Spout的开发一般会采用继承自BaseRichSpout。需要重写以下函数:

public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {}

在Spout启动时运行,一般做一些初始化操作,比如数据库的连接等等。

public void  nextTuple(){}

会被循环调用,利用SpoutOutputCollector的emit函数发送new Values,用以产生一条tuple。注意,nextTuple要求是非阻塞的。

public void declareOutputFields(){}

用于定义nextTuple()发送的的tuple的字段名。

public void close(){}

用于在Spout关闭时做一些断开连接的操作,比如关闭数据库连接。


二、bolt

Bolt的开发一般会继承BaseRichBolt和BaseBasicBolt类。这两个类的区别之一是,当需要做Ack和Fail操作的时候,BaseBasicBolt会自动处理,不用使用者重写。

这里介绍一下BaseBasicBolt

public void prepare(Map stormConf, TopologyContext context){}

Bolt初始化时调用。

public void execute(Tuple input, BasicOutputCollector collector){}

收到一条tuple时调用,传入参数input,同时可以利用collector来发送新tuple。

public void declareOutputFields(OutputFieldsDeclarer declarer) {}

定义execute发送的tuple的字段名,与发送的Values一一对应。



0 0