storm之tuple详解

本文深入解析了Apache Storm中Tuple的数据模型,Tuple作为Storm的核心数据结构,由一系列无边界的值组成,每个值都有一个特定的名字,代表数据流中的基本处理单元。文章详细介绍了如何在Storm的Topology中定义和使用Tuple,包括Spout类中的nextTuple方法,以及Bolt如何发射Tuple。

Storm中的数据结构类型为Tuple

官方解释:

“A tuple is a named of values where each value can be any type.”

tuple是一个类似于列表的东西,存储的每个元素叫做field(字段),可以是任何类型。

Storm使用tuple作为它的数据模型, 每个tuple是一堆值,每个值都有一个名字,

一个Tuple代表数据流中的一个基本处理单元,例如:一条cookie日志,他可以包含多个Field, 每个Field表示一个属性。

Tuple本应该是一个Key-Value的Map, 由于各个组件之间的传递的tuple字段名称已经实现预定好了,

所以Tuple只需要按序填入各个Value,所以就是一个Value List。

一个没有边界、源源不断的Tuple序列就组成了Stream。

topology里面的每个节点,必须定义它要发射的Tuple的每个字段,必须下面这个bolt定义它所发射的tuple包含两个字段,类型分别为double,triple。

public class DoubleAndTripleBolt implements IRichBolt {

    private OutputCollector _collector;

    @Override

    public void prepare(Map conf, TopologyContext context, OutputCollector collector) {

        _collector = collector;

    }

    @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() {

    }

    @Override

    public void declareOutputFields(OutputFieldsDeclarer declarer) {

        declarer.declare(newFields("double","triple"));

    }

}

// declareOutputFields方法定义要输出的字段 : [“double”, “triple”]。

nextTuple() -- 这是Spout类中最重要的一个方法。发射一个Tuple到Topology都是通过这个方法来实现的。调用此方法时,storm向spout发出请求, 让spout发出元组(tuple)到输出器(ouput collector)。这种方法应该是非阻塞的,所以spout如果没有元组发出,这个方法应该返回。nextTuple、ack 和fail 都在spout任务的同一个线程中被循环调用。 当没有元组的发射时,应该让nextTuple睡眠一个很短的时间(如一毫秒),以免浪费太多的CPU。 

 

转载自:https://blog.csdn.net/wuxintdrh/article/details/61933004

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值