storm tuple 結構

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

相關文章
相關標籤/搜索