1、Tuple,Value,Field

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。

declareOutputFields方法定义要输出的字段 : [“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(new Fields("double","triple"));
}
}
declareOutputFields方法定义要输出的字段 : [“sentence”]。
public class RandomSentenceSpout extends BaseRichSpout {

    //用来收集Spout输出的tuple
private SpoutOutputCollector collector;
private Random random; //该方法调用一次,主要由storm框架传入SpoutOutputCollector
@Override
public void open(Map map, TopologyContext topologyContext, SpoutOutputCollector spoutOutputCollector) {
this.collector = collector;
random = new Random();
//连接kafka mysql ,打开本地文件
} /**
* 上帝之手
* while(true)
* spout.nextTuple()
*/
@Override
public void nextTuple() {
String[] sentences = new String[]{
"the cow jumped over the moon","the dog jumped over the moon",
"the pig jumped over the gun","the fish jumped over the moon","the duck jumped over the moon",
"the man jumped over the sun","the girl jumped over the sun","the boy jumped over the sun"
};
String sentence = sentences[random.nextInt(sentences.length)]; collector.emit(new Values(sentence)); System.out.println("RandomSentenceSpout 发送数据:"+sentence);
} //消息源可以发射多条消息流stream
@Override
public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
outputFieldsDeclarer.declare(new Fields("sentence"));
}
}

2、Storm中的一些概念理解的更多相关文章

  1. Storm中并发程度的理解

    Storm中涉及到了很多组件,例如nimbus,supervisor等等,在参考了这两篇文章之后,对这个有了更好的理解. Understanding the parallelism of a Stor ...

  2. ubuntn系统下将文件拷贝到优盘中及挂载概念理解

    参考资料:http://jingyan.baidu.com/article/7082dc1c76f178e40a89bdd3.html: http://bbs.csdn.net/topics/3801 ...

  3. storm中的一些概念

    1.topology 一个topolgy是spouts和bolts组成的图,通过stream groupings将图中的spout和bolts连接起来:如图所示: 一个topology会一直运行知道你 ...

  4. storm中的基本概念

    Storm是一个流计算框架,处理的数据是实时消息队列中的,所以需要我们写好一个topology逻辑放在那,接收进来的数据来处理,所以是通过移动数据平均分配到机器资源来获得高效率. Storm的优点是全 ...

  5. Java基础中的一些概念理解

    同步 和 异步区别 同步和异步通常用来形容一次方法的调用. 同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为.而异步方法调用更像一个消息传递,一旦开始,方法调用就会立即返回,调用 ...

  6. storm中几个概念的大小关系

    从图可以看出来:topology>supervisor>worker>excutor>task; 也就是说一个topology可以运行在多个supervisor上,一个supe ...

  7. 关于Storm 中Topology的并发度的理解

    来自:https://storm.apache.org/documentation/Understanding-the-parallelism-of-a-Storm-topology.html htt ...

  8. OpenStack中Keystone的基本概念理解

    原文http://www.kankanews.com/ICkengine/archives/10788.shtml Keystone简介 Keystone(OpenStack Identity Ser ...

  9. storm源码之理解Storm中Worker、Executor、Task关系 + 并发度详解

    本文导读: 1 Worker.Executor.task详解 2 配置拓扑的并发度 3 拓扑示例 4 动态配置拓扑并发度 Worker.Executor.Task详解: Storm在集群上运行一个To ...

随机推荐

  1. 洛谷P1115 最大字段和【线性dp】

    题目:https://www.luogu.org/problemnew/show/P1115 题意: 求给定数组的最大区间和. 思路: $dp[i][0]$表示以1~i的数组,不选i的最大字段和.$d ...

  2. vuejs 70行代码实现便签功能

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 审核被拒Guideline 2.1 - Information Needed we are unable to find 账号登录 option

    Guideline 2.1 - Information Needed We were unable to sign in to review your app with the demo accoun ...

  4. 查看历史会话等待事件对应的session信息

    此处以enq: TX - row lock contention等待时间为例. 查看snap_id对应时间 select to_char(s.startup_time,'dd Mon "at ...

  5. LG1484 种树

    题意 \(N\)个数,至多选\(k\)个,相邻两数不能同时选,问最大价值. 思路 一种假的思路:直接扔进对里面,每次都选最大的可以选的,再把两边和自己标记为不能选,一直贪心下去.是不是很有道理? 假在 ...

  6. 2018(5)软件架构设计,架构风格,REST

    2018上半年系统分析师试题五 阅读以下关于Web应用设计开发的描述,在答题纸上回答问题1至问题3. [说明] 某公司拟开发一个自由,可定制性强.用户界面友好的在线调查系统,以获取员工在课程学习.对公 ...

  7. MySQL 误删数据、误更新数据(update,delete忘加where条件)

    MySQL 误操作后数据恢复(update,delete忘加where条件) 关键词:mysql误删数据,mysql误更新数据 转自:https://www.cnblogs.com/gomysql/p ...

  8. 动态代理处理service

    /* 动态代理处理service * 1.动态代理的核心是切面编程,去除重复代码: * 2.通过反射+注解可以灵活的获取传入对象内容: * 3.通过try+catch将多个操作包裹,实现事物的原子性: ...

  9. ELK日志分析解决方案

    概要 ELK(Elasticsearch , Logstash, Kibana的简称)是目前比较流行的日志分析解决方案,核心包括了三个部分 Elasticsearch:日志查询分析引擎 Logstas ...

  10. ZooKeeper02

    Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,主要是用来解决分布式应用中经常遇到的一些数据管理问题.