Spout:数据流的生成者,是主要数据入口,充当采集器角色,链接到数据源,将数据转换为一个个tuple,并将tuple做为数据流 进行发射
Bolt:计算,将一个个数据流做为输入,对数据流实施运算后,选择性得输出一个或者多个数据流,bolt可一个订阅多个由spout或者其余bolt发射的数据了流
复制代码
全部的Spout,Bolt组件都须要实现IComponent接口git
public interface IComponent extends Serializable {
/**
* IComponent接口定义,因此Storm组件(spout,bolt)必须实现
* Storm经过这个方法告诉Storm该组件会发射那些数据流,每一个数据流的tuple包含那些字段
* @param outputFieldsDeclarer
*/
void declareOutputFields(OutputFieldsDeclarer var1);
/**
* 获取配合信息
*/
Map<String, Object> getComponentConfiguration();
}
复制代码
public interface ISpout extends Serializable {
/**
* 由ISpout接口定义,全部Spout组件在初始化时调用这个方法
* @param map 包含Storm配置信息的map
* @param topologyContext topology组件的信息
* @param spoutOutputCollector 提供发射的方法
*/
void open(Map var1, TopologyContext var2, SpoutOutputCollector var3);
/**
* 销毁的时候调用
*/
void close();
void activate();
void deactivate();
/**
* 由ISpout接口定义,全部spout实现的核心所在
* Storm经过调用这个方法向输出的collector发射tuple
*/
void nextTuple();
/**
* 下游bolt将tuple处理成功,会调用ack方法
* @param msgId
*/
void ack(Object var1);
/**
* 下游bolt将tuple处理失败,会调用msgId方法
* @param msgId 每一个tuple的惟一标识
*/
void fail(Object var1);
}
复制代码
public interface IBolt extends Serializable {
/**
* 由IBolt接口定义,类同与ISpout接口的open方法
* 在bolt初始化的时候调用,能够用来准备bolt用到的资源,如数据库链接
* @param map
* @param topologyContext
* @param outputCollector
*/
void prepare(Map var1, TopologyContext var2, OutputCollector var3);
/**
* bolt的核心功能所在,由IBolt接口定义
* 每当从订阅的数据流中接收一个tuple,都会调用这个方法
* @param tuple
*/
void execute(Tuple var1);
/**
* 由IBolt接口定义,Storm在终止一个bolt前调用这个方法
*/
void cleanup();
}
复制代码
使用Storm开发的好处是Storm有一个本地模式,本地模式会在JVM实例中模拟一个Storm集群。大大简化了用户在开发环境或者IDE中进行开发和调试github
下面附上词频统计案例源码 github.com/MarkGao1152…数据库