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…數據庫