最近研究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)); }经过反复测试,下面是我个人的一些总结,如果有缺少或者错误我会及时改正。
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
luonq -> instance1 qinnanluo -> instance2 py -> instance3 pangyang -> instance2
py -> instance3 qinnl -> instance3
Storm杂记 — Field Grouping和Shuffle Grouping的区别
原文地址:http://blog.csdn.net/luonanqin/article/details/40436397