Storm里面fieldsGrouping和Field的概念详解
来源:互联网 发布:只有程序员才懂的笑话 编辑:程序博客网 时间:2024/06/10 12:27
这个Field通常和fieldsGrouping分组机制一起使用,这个Field特别难理解,我自己也是在网上看了好多文章,感觉依旧讲的不是很清楚,是似而非,没有抓到重点。这个问题足足困扰了我3-4天时间,一直理解不了Field的概念,
当前我觉得new Fields("word")就相当于表的表头,就是定义这个域,这个域里面放的东西,是emit进去的
Spouts--->Bolts;
Bolts---->Bolts;
Field:"Word"
the
sporm
is
...
模拟消息发送,根据Field里面的内容自动选择Task
当遇到相同内容的时候,会找到之前有此内容的Task
the--->Task1(随机)
sporm--->Task2(随机)
ant--->Task3(随机)
the--->Task1(同样Field内容映射到Task1)
see--->Task4(随机)
watch---->Task2(没找到同样内容的Task,随机找个Task2)
例子1:
第一步:定义了一个表头
public void declareOutputFields(OutputFieldsDeclarer declarer)
{
declarer.declare(new Fields("word"));
}
第二步:往这个Field空间里面emit进去内容(可以是Bolt和Spolt)
public void execute(Tuple input, BasicOutputCollector collector)
{
String sentence = input.getString(0);
String[] words = sentence.split(" ");
for (String word : words)
{
word = word.trim();
if (!word.isEmpty())
{
word = word.toLowerCase();
collector.emit(new Values(word));
}
}
}
第三步:关联步骤
TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("word-reader",new WordReader());
builder.setBolt("word-normalizer", new WordNormalizer()).shuffleGrouping("word-reader");
Integer number = 2;
builder.setBolt("word-counter", new WordCounter(), 4).fieldsGrouping("word-normalizer", new Fields("word"));
第四步:
最终实现的结果:
Field:Word
the
sporm
is
...
例子2:
第一步:
public void declareOutputFields(OutputFieldsDeclarer declarer)
{
declarer.declare(new Fields("word", "count"));
}
第二步:
public void execute(Tuple tuple, BasicOutputCollector collector)
{
String word = tuple.getString(0);
Integer count = counts.get(word);
if (count == null)
count = 0;
count++;
counts.put(word, count);
collector.emit(new Values(word, count));
}
第三步:
Fields("word", "count")
“is”,1
“sporm”,3
“the”,2
.....
例子3:
D:\.....\Workspaces\MyEclipse 8.5\bigData\examples-ch06-real-life-app-master\src\main\java\storm\analytics\....
第一步:
TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("read-feed", new UsersNavigationSpout(), 3);
builder.setBolt("get-categ", new GetCategoryBolt(), 3).shuffleGrouping("read-feed");
builder.setBolt("user-history", new UserHistoryBolt(), 5).fieldsGrouping("get-categ", new Fields("user"));
第二步:发送者输出是三个结构体:Fields("user","product", "categ")
GetCategoryBolt.java
public void execute(Tuple input, BasicOutputCollector collector)
{
NavigationEntry entry = (NavigationEntry)input.getValue(1);
if("PRODUCT".equals(entry.getPageType())){
try {
String product = (String)entry.getOtherData().get("product");
// Call the items API to get item information
Product itm = reader.readItem(product);
if(itm ==null)
return ;
String categ = itm.getCategory();
collector.emit(new Values(entry.getUserId(), product, categ));
} catch (Exception ex) {
System.err.println("Error processing PRODUCT tuple"+ ex);
ex.printStackTrace();
}
}
}
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields("user","product", "categ"));
}
第三步:new Fields("user"))只取Fields("user","product", "categ"))中的User
builder.setBolt("user-history", new UserHistoryBolt(), 5).fieldsGrouping("get-categ", new Fields("user"));
1 0
- Storm里面fieldsGrouping和Field的概念详解
- storm关于fieldsGrouping的理解
- storm中fieldsGrouping的分配策略实质
- storm fieldsGrouping按照字段分组
- storm中declareOutputFields方法的使用规则及与fieldsGrouping方法的联系
- Storm杂记 — Field Grouping和Shuffle Grouping的区别
- Storm的重要概念
- Storm的重要概念
- Storm的重要概念
- Storm的相关概念
- Storm概念、原理详解及其应用(二)Storm Cluster
- Storm概念、原理详解及其应用(二)Storm Cluster
- Storm概念、原理详解及其应用(二)Storm Cluster
- C#里面有什么办法能方便的定义Field和Property
- Storm 概念
- 2.storm原理和概念详述
- Storm概念讲解和工作原理介绍
- 搭建Storm集群与Storm的并发概念简介
- open()方法的大小问题
- Objective-C
- 秒杀多线程第十四篇 读者写者问题继 读写锁SRWLock
- Arcgis 怎样把string类型的数据转为int型
- java调用7zip demo
- Storm里面fieldsGrouping和Field的概念详解
- 14-mysql优化之使用存储过程向mysql数据库中添加4000000条数据
- iOS原生自定义二维码扫描界面(类似微信)
- 三维空间中旋转的表示
- css3-选择器
- 搭建基于"Jenkins"的iOS持续集成环境
- memcache共享session
- Android常用控件(一)
- Windows配置Android环境(eclipse+adt+sdk+genymotion)