文档章节

Storm杂记 — Field Grouping和Shuffle Grouping的区别

tomenttosa
 tomenttosa
发布于 2016/09/07 16:52
字数 604
阅读 32
收藏 0

转载请注明出处:http://blog.csdn.net/luonanqin

       最近研究Storm的Stream Grouping的时候,对Field Grouping和Shuffle Grouping理解不是很透彻。去看WordCountTopology也不怎么理解,后来脑洞一开,加了一行代码再次运行,彻底顿悟。只能说自己对Storm的基本概念还是没吃透啊。(WordCountTopology这个例子请自行参考Storm-Starter)

public void execute(Tuple tuple, BasicOutputCollector collector) {
	String word = tuple.getString(0);

	// 添加这行代码的作用是看看值相等的word是不是同一个实例执行的,实时证明确实如此
	System.out.println(this + "====" + word);
	
	Integer count = counts.get(word);
	if (count == null)
		count = 0;
	count++;
	counts.put(word, count);
	collector.emit(new Values(word, count));
}

经过反复测试,下面是我个人的一些总结,如果有缺少或者错误我会及时改正。

官方文档里有这么一句话:“if the stream is grouped by the “user-id” field, tuples with the same “user-id” will always go to the same task”

一个task就是一个处理逻辑的实例,所以fields能根据tuple stream的id,也就是下面定义的xxx

public void declareOutputFields(OutputFieldsDeclarer declarer) {
        declarer.declare(new Fields("xxx"));
}

xxx所代表的具体内容会由某一个task来处理,并且同一个xxx对应的内容,处理这个内容的task实例是同一个。

比如说:
 

bolt第一次emit三个流,即xxx有luonq pangyang qinnl三个值,假设分别建立三个task实例来处理:

luonq -> instance1  
pangyang -> instance2  
qinnl -> instance3  


然后第二次emit四个流,即xxx有luonq qinnanluo py pangyang四个值,假设还是由刚才的三个task实例来处理:

luonq -> instance1  
qinnanluo -> instance2  
py -> instance3  
pangyang -> instance2  


然后第三次emit两个流,即xxx有py qinnl两个值,假设还是由刚才的三个task实例来处理:

py -> instance3  
qinnl -> instance3  


最后我们看看三个task实例都处理了哪些值,分别处理了多少次:

instance1: luonq(处理2次)
instance2: pangyang(处理2次) qinnanluo(处理1次)
instance3: qinnl(处理2次) py(处理2次)

结论:
1. emit发出的值第一次由哪个task实例处理是随机的,此后再次出现这个值,就固定由最初处理他的那个task实例再次处理,直到topology结束

2. 一个task实例可以处理多个emit发出的值

3. 和shuffle Grouping的区别就在于,当emit发出同样的值时,处理他的task是随机的

本文转载自:http://blog.csdn.net/luonanqin/article/details/40436397

共有 人打赏支持
tomenttosa
粉丝 0
博文 19
码字总数 6431
作品 0
徐汇
私信 提问
Twitter Storm, 数据流分组策略,fieldsGrouping

Storm Grouping shuffleGrouping fieldsGrouping All grouping Global grouping None grouping Direct grouping fieldsGrouping 上面的资料我摘抄自:http://xumingming.sinaapp.com/127/twi......

震秦
2014/04/14
0
0
Storm笔记整理(四):Storm核心概念与验证——并行度与流式分组

[TOC] Storm核心概念之并行度 Work 1个worker进程执行的是1个topology的子集(注:不会出现1个worker为多个topology服务)。1个worker进程会启动1个或多个executor线程来执行1个topology的(...

xpleaf
2018/04/13
0
0
storm 原理简介及单机版安装指南(转)

本文翻译自: https://github.com/nathanmarz/storm/wiki/Tutorial Storm是一个分布式的、高容错的实时计算系统。 Storm对于实时计算的的意义相当于Hadoop对于批处理的意义。Hadoop为我们提供...

Jacos
2014/12/03
0
0
storm翻译(2):Concepts

Concepts:概念 原文:http://storm.apache.org/documentation/Concepts.html 这个列表展示了storm中的主要概念和相关详细信息。这些概念是: Topologies Streams Spouts Bolts Stream group...

岩之有理
2015/02/10
0
0
Storm入门 第二章 构建Topology

2.1 Storm基本概念 在运行一个Storm任务之前,需要了解一些概念: Topologies Streams Spouts Bolts Stream groupings Reliability Tasks Workers Configuration Storm集群和Hadoop集群表面上...

坏坏一笑
2014/12/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

day11

architect刘源源
今天
7
0
论学好Linux系统的超级重要性

不知道各位在日常的工作生活中有没有接触过“rm -rf /*”这个命令,因为这个命令搞出来的事情可还不少呢!前段时间就在一个群里看到了有个小伙子,老板让他去维护一下服务器,这小伙也不太懂...

Linux就该这么学
昨天
6
0
git 使用

1,首先在github配置好信息和仓库,然后在本地进行操作 git init git config user.name 'zhangwuer' git config user.email '56789053@qq.com' 2,与远程分支建立连接 git checkout -b test......

天王盖地虎626
昨天
3
0
git checkout 命令详解

在日常的git操作中,git checkout——检出,是我们的常用命令。最为常用的两种情形是创建分支和切换分支。 在下面的命令中,使用了一些简写,在这里说明一下: git st # git statusgit ci ...

shzwork
昨天
11
0
【Nginx】Nginx多级代理,获取客户端真实请求IP以及每级代理IP

Nginx多级代理,获取客户端真实请求IP以及每级代理IP 如图所示,每一级nginx里的location配置里需要加上对应的配置,最后一级nginx是直接到应用,测试时为了方便,直接用echo模块去测试,打印...

薛定谔的旺
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部