Spout:数据流的生成者,是主要数据入口,充当采集器角色,连接到数据源,将数据转换为一个个tuple,并将tuple作为数据流 进行发射
Bolt:计算,将一个个数据流作为输入,对数据流实施运算后,选择性得输出一个或者多个数据流,bolt可一个订阅多个由spout或者其他bolt发射的数据了流
所有的Spout,Bolt组件都需要实现IComponent接口
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中进行开发和调试
下面附上词频统计案例源码 https://github.com/MarkGao11520/word-count-storm-demo