jstorm 数据流分流和合并
来源:互联网 发布:域名注册怎样收费 编辑:程序博客网 时间:2024/04/28 21:45
参考:
https://github.com/alibaba/jstorm/wiki/%E6%95%B0%E6%8D%AE%E6%B5%81%E5%88%86%E6%B5%81%E5%92%8C%E5%90%88%E5%B9%B6
1.分流- 发送不同的tuple
在SplitRecord.java中:SplitRecord将发送两个tuple
collector.emit(SequenceTopologyDef.TRADE_STREAM_ID, new Values(tupleId, trade));collector.emit(SequenceTopologyDef.CUSTOMER_STREAM_ID, new Values(tupleId, customer));
SequenceTopologyTool.java:TRADE_BOLT_NAME和CUSTOMER_BOLT_NAME接收来自SplitRecord不同的tuple
builder.setBolt(SequenceTopologyDef.SPLIT_BOLT_NAME, new SplitRecord(), bolt_Parallelism_hint) .localOrShuffleGrouping(SequenceTopologyDef.SEQUENCE_SPOUT_NAME);builder.setBolt(SequenceTopologyDef.TRADE_BOLT_NAME, new PairCount(), bolt_Parallelism_hint).shuffleGrouping(SequenceTopologyDef.SPLIT_BOLT_NAME, SequenceTopologyDef.TRADE_STREAM_ID);builder.setBolt(SequenceTopologyDef.CUSTOMER_BOLT_NAME, new PairCount(), bolt_Parallelism_hint).shuffleGrouping(SequenceTopologyDef.SPLIT_BOLT_NAME, SequenceTopologyDef.CUSTOMER_STREAM_ID);
定义输出格式:
public void declareOutputFields(OutputFieldsDeclarer declarer) { declarer.declareStream(SequenceTopologyDef.TRADE_STREAM_ID, new Fields("ID", "TRADE")); declarer.declareStream(SequenceTopologyDef.CUSTOMER_STREAM_ID, new Fields("ID", "CUSTOMER")); }
接收数据时判断数据流:
if (input.getSourceStreamId().equals(SequenceTopologyDef.TRADE_STREAM_ID) ) { customer = pair; customerTuple = input; tradeTuple = tradeMap.get(tupleId); if (tradeTuple == null) { customerMap.put(tupleId, input); return; } trade = (Pair) tradeTuple.getValue(1); }
2.分流- 发送相同的tuple到多个tuple
SpoutDeclarer spout = builder.setSpout(SequenceTopologyDef.SEQUENCE_SPOUT_NAME, new SequenceSpout(), spoutParal);builder.setBolt(SequenceTopologyDef.TRADE_BOLT_NAME, new PairCount(), 1).shuffleGrouping( SequenceTopologyDef.SEQUENCE_SPOUT_NAME);builder.setBolt(SequenceTopologyDef.CUSTOMER_BOLT_NAME, new PairCount(), 1) .shuffleGrouping(SequenceTopologyDef.SEQUENCE_SPOUT_NAME);
4.分流- 数据流合并
在下面例子中, MergeRecord 同时接收SequenceTopologyDef.TRADE_BOLT_NAME 和SequenceTopologyDef.CUSTOMER_BOLT_NAME 的数据
builder.setBolt(SequenceTopologyDef.TRADE_BOLT_NAME, new PairCount(), 1).shuffleGrouping( SequenceTopologyDef.SPLIT_BOLT_NAME, SequenceTopologyDef.TRADE_STREAM_ID); builder.setBolt(SequenceTopologyDef.CUSTOMER_BOLT_NAME, new PairCount(), 1) .shuffleGrouping(SequenceTopologyDef.SPLIT_BOLT_NAME, SequenceTopologyDef.CUSTOMER_STREAM_ID); builder.setBolt(SequenceTopologyDef.MERGE_BOLT_NAME, new MergeRecord(), 1) .shuffleGrouping(SequenceTopologyDef.TRADE_BOLT_NAME) .shuffleGrouping(SequenceTopologyDef.CUSTOMER_BOLT_NAME);
接收方
接收方是,区分一下来源component即可识别出数据的来源:
if (input.getSourceComponent().equals(SequenceTopologyDef.CUSTOMER_BOLT_NAME) ) { customer = pair; customerTuple = input; tradeTuple = tradeMap.get(tupleId); if (tradeTuple == null) { customerMap.put(tupleId, input); return; } trade = (Pair) tradeTuple.getValue(1); } else if (input.getSourceComponent().equals(SequenceTopologyDef.TRADE_BOLT_NAME)) { trade = pair; tradeTuple = input; customerTuple = customerMap.get(tupleId); if (customerTuple == null) { tradeMap.put(tupleId, input); return; } customer = (Pair) customerTuple.getValue(1); }
阅读全文
0 0
- jstorm 数据流分流和合并
- SVN分支和合并
- SVN分支和合并
- 批次拆分和合并
- SVN分支和合并
- SVN分支和合并
- TortoiseSVN 分支和合并
- 时间过滤和合并
- 文件分割和合并
- leetcode链表逆置和合并
- Storm(六):数据流的分流与合流
- 文件的分割和合并
- 快速比较和合并文件
- 矩阵的分块和合并
- SVN分支和合并(转)
- git branch 分枝和合并
- 文件的分割和合并
- 分枝和合并基础知识介绍
- java在cmd下编译运行
- Android 自定义Dialog可以传入layout
- 使用redis分布式锁解决spring schedule集群部署重复执行问题
- hive建表乱码
- tp5简单的图片上传
- jstorm 数据流分流和合并
- Unity3D监听事件
- 2017/12/21 jQuery
- 线段树
- Java调用在default package下的类
- js的问题(2017年12月21日)
- 1074. 宇宙无敌加法器(20)
- <a>标签的href与onclick事件区别
- jupyter-notebook无法启动,闪退问题的解决方法~