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

相关文章
相关标签/搜索