storm使用tuple來做爲它的數據模型。每一個tuple是一堆值,每一個值有一個名字,而且每一個值能夠是任何類型, 在個人理解裏面一個tuple能夠看做一個沒有方法的java對象。整體來看,storm支持全部的基本類型、字符串以及字節數組做爲tuple的值類型。你也能夠使用你本身定義的類型來做爲值類型, 只要你實現對應的序列化器(serializer)。
一個Tuple表明數據流中的一個基本的處理單元,例如一條cookie日誌,它能夠包含多個Field,每一個Field表示一個屬性。java
Tuple原本應該是一個Key-Value的Map,因爲各個組件間傳遞的tuple的字段名稱已經事先定義好了,因此Tuple只須要按序填入各個Value,因此就是一個Value List。數組
一個沒有邊界的、源源不斷的、連續的Tuple序列就組成了Stream。cookie
topology裏面的每一個節點必須定義它要發射的tuple的每一個字段。 好比下面這個bolt定義它所發射的tuple包含兩個字段,類型分別是: double和triple。ide
public class DoubleAndTripleBolt implements IRichBolt {
private OutputCollector _collector;日誌
@Override
public void prepare(Map conf, TopologyContext context, OutputCollector collector) {
_collector = collector;
}orm
@Override
public voide xecute(Tuple input) {
int val = input.getInteger(0);
_collector.emit(input,new Values(val*2, val*3));
_collector.ack(input);
}對象
@Override
public void cleanup() {
}ip
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(newFields("double","triple"));
}
}字符串
declareOutputFields方法定義要輸出的字段 : ["double", "triple"]。get