Storm的StreamID使用样例(版本1.0.2)
随手尝试了一下StreamID的的用法。留个笔记。
==数据样例==
{
"Address": "小桥镇小桥中学对面",
"CityCode": "511300",
"CountyCode": "511322",
"EnterpriseCode": "YUNDA",
"MailNo": "667748320345",
"Mobile": "183****5451",
"Name": "王***",
"ProvCode": "510000",
"Weight": "39"
}
==拓扑结构==
==程序源码==
<Spout1>
package test; import com.alibaba.fastjson.JSONObject;
import common.constants.Constants;
import common.simulate.DataRandom;
import org.apache.storm.spout.SpoutOutputCollector;
import org.apache.storm.task.TopologyContext;
import org.apache.storm.topology.OutputFieldsDeclarer;
import org.apache.storm.topology.base.BaseRichSpout;
import org.apache.storm.tuple.Fields;
import org.apache.storm.tuple.Values; import java.util.Map; public class Spout1 extends BaseRichSpout {
private SpoutOutputCollector _collector = null;
private DataRandom _dataRandom = null;
private int _timeInterval = 1000; @Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declareStream("Stream1", new Fields("json"));
declarer.declareStream("Stream2", new Fields("json"));
} @Override
public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
_collector = collector;
_dataRandom = DataRandom.getInstance();
if (conf.containsKey(Constants.SpoutInterval)) {
_timeInterval = Integer.valueOf((String) conf.get(Constants.SpoutInterval));
}
} @Override
public void nextTuple() {
try {
Thread.sleep(_timeInterval);
} catch (InterruptedException e) {
e.printStackTrace();
} JSONObject jsonObject = _dataRandom.getRandomExpressData();
System.out.print("[---Spout1---]jsonObject=" + jsonObject + "\n");
_collector.emit("Stream1", new Values(jsonObject.toJSONString()));
_collector.emit("Stream2", new Values(jsonObject.toJSONString()));
}
}
<CountBolt1>
package test; import com.alibaba.fastjson.JSONObject;
import common.constants.Constants;
import org.apache.storm.task.OutputCollector;
import org.apache.storm.task.TopologyContext;
import org.apache.storm.topology.OutputFieldsDeclarer;
import org.apache.storm.topology.base.BaseRichBolt;
import org.apache.storm.tuple.Fields;
import org.apache.storm.tuple.Tuple;
import org.apache.storm.tuple.Values; import java.util.HashMap;
import java.util.Map; public class CountBolt1 extends BaseRichBolt {
private OutputCollector _collector = null;
private int taskId = 0;
private Map<String, Integer> _map = new HashMap<>(); @Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declareStream("Stream3", new Fields("company", "count"));
} @Override
public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {
_collector = collector;
taskId = context.getThisTaskId();
} @Override
public void execute(Tuple input) {
String str = input.getStringByField("json");
JSONObject jsonObject = JSONObject.parseObject(str);
String company = jsonObject.getString(Constants.EnterpriseCode); int count = 0;
if (_map.containsKey(company)) {
count = _map.get(company);
}
count++;
_map.put(company, count); _collector.emit("Stream3", new Values(company, count));
System.out.print("[---CountBolt1---]" +
"taskId=" + taskId + ", company=" + company + ", count=" + count + "\n");
}
}
<CountBolt2>
package test; import com.alibaba.fastjson.JSONObject;
import common.constants.Constants;
import org.apache.storm.task.OutputCollector;
import org.apache.storm.task.TopologyContext;
import org.apache.storm.topology.OutputFieldsDeclarer;
import org.apache.storm.topology.base.BaseRichBolt;
import org.apache.storm.tuple.Fields;
import org.apache.storm.tuple.Tuple;
import org.apache.storm.tuple.Values; import java.util.HashMap;
import java.util.Map;
import java.util.UUID; public class CountBolt2 extends BaseRichBolt {
private OutputCollector _collector = null;
private int _taskId = 0;
private Map<String, Integer> _map = new HashMap<>(); @Override
public void prepare(Map map, TopologyContext topologyContext, OutputCollector outputCollector) {
_collector = outputCollector;
_taskId = topologyContext.getThisTaskId();
} @Override
public void execute(Tuple tuple) {
String str = tuple.getStringByField("json");
JSONObject jsonObject = JSONObject.parseObject(str);
String prov = jsonObject.getString(Constants.ProvCode); int count = 0;
if (_map.containsKey(prov)) {
count = _map.get(prov);
}
count++;
_map.put(prov, count); _collector.emit("Stream4", new Values(prov, count, UUID.randomUUID()));
System.out.print("[---CountBolt2---]" +
"taskId=" + _taskId + ", prov=" + prov + ", count=" + count + "\n");
} @Override
public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
outputFieldsDeclarer.declareStream("Stream4", new Fields("prov", "count", "random"));
}
}
<CountBolt3>
package test; import com.alibaba.fastjson.JSONObject;
import common.constants.Constants;
import org.apache.storm.task.OutputCollector;
import org.apache.storm.task.TopologyContext;
import org.apache.storm.topology.OutputFieldsDeclarer;
import org.apache.storm.topology.base.BaseRichBolt;
import org.apache.storm.tuple.Fields;
import org.apache.storm.tuple.Tuple;
import org.apache.storm.tuple.Values; import java.util.HashMap;
import java.util.Map;
import java.util.UUID; public class CountBolt3 extends BaseRichBolt {
private OutputCollector _collector = null;
private int _taskId = 0;
private Map<String, Integer> _map = new HashMap<>(); @Override
public void prepare(Map map, TopologyContext topologyContext, OutputCollector outputCollector) {
_collector = outputCollector;
_taskId = topologyContext.getThisTaskId();
} @Override
public void execute(Tuple tuple) {
String str = tuple.getStringByField("json"); JSONObject jsonObject = JSONObject.parseObject(str);
String city = jsonObject.getString(Constants.CityCode); int count = 0;
if (_map.containsKey(city)) {
count = _map.get(city);
}
count++;
_map.put(city, count); _collector.emit("Stream4", new Values(city, count));
System.out.print("[---CountBolt3---]" +
"taskId=" + _taskId + ", city=" + city + ", count=" + count + "\n");
} @Override
public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
outputFieldsDeclarer.declareStream("Stream4", new Fields("city", "count"));
}
}
<TopBolt>
package test; import org.apache.storm.task.OutputCollector;
import org.apache.storm.task.TopologyContext;
import org.apache.storm.topology.OutputFieldsDeclarer;
import org.apache.storm.topology.base.BaseRichBolt;
import org.apache.storm.tuple.Tuple; import java.util.List;
import java.util.Map; public class TopBolt extends BaseRichBolt { @Override
public void prepare(Map map, TopologyContext topologyContext, OutputCollector outputCollector) {
} @Override
public void execute(Tuple tuple) {
System.out.print("[---TopBolt---]StreamID=" + tuple.getSourceStreamId() + "\n");
List<Object> values = tuple.getValues();
for(Object value : values) {
System.out.print("[---TopBolt---]value=" + value + "\n");
}
} @Override
public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
}
}
<TestTopology>
package test; import org.apache.storm.Config;
import org.apache.storm.LocalCluster;
import org.apache.storm.StormSubmitter;
import org.apache.storm.generated.AlreadyAliveException;
import org.apache.storm.generated.AuthorizationException;
import org.apache.storm.generated.InvalidTopologyException;
import org.apache.storm.topology.TopologyBuilder;
import org.apache.storm.tuple.Fields; public class TestTopology {
public static void main(String[] args)
throws InvalidTopologyException, AuthorizationException, AlreadyAliveException {
TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("Spout1", new Spout1());
builder.setBolt("Count1", new CountBolt1()).shuffleGrouping("Spout1", "Stream1");
builder.setBolt("Count2", new CountBolt2()).shuffleGrouping("Spout1", "Stream2");
builder.setBolt("Count3", new CountBolt3()).shuffleGrouping("Spout1", "Stream2");
builder.setBolt("Top", new TopBolt())
.fieldsGrouping("Count1", "Stream3", new Fields("company"))
.fieldsGrouping("Count2", "Stream4", new Fields("prov"))
.fieldsGrouping("Count3", "Stream4", new Fields("city")); Config config = new Config();
config.setNumWorkers(1);
config.put(common.constants.Constants.SpoutInterval, args[1]); if (Boolean.valueOf(args[0])) {
StormSubmitter.submitTopology("TestTopology1", config, builder.createTopology());
} else {
LocalCluster localCluster = new LocalCluster();
localCluster.submitTopology("TestTopology1", config, builder.createTopology());
}
}
}
==结果日志==
[---Spout1---]jsonObject={"CityCode":"511300","CountyCode":"511322","Address":"小桥镇小桥中学对面","MailNo":"667748320345","ProvCode":"510000","Mobile":"183****5451","EnterpriseCode":"YUNDA","Weight":"39","Name":"王***"}
[---CountBolt1---]taskId=1, company=YUNDA, count=1
[---CountBolt3---]taskId=3, city=511300, count=1
[---CountBolt2---]taskId=2, prov=510000, count=1
[---TopBolt---]StreamID=Stream4
[---TopBolt---]value=510000
[---TopBolt---]value=1
[---TopBolt---]value=99bd1cdb-d5c1-4ac8-b1a1-a4cfffb5a616
[---TopBolt---]StreamID=Stream4
[---TopBolt---]value=511300
[---TopBolt---]value=1
[---TopBolt---]StreamID=Stream3
[---TopBolt---]value=YUNDA
[---TopBolt---]value=1
Storm的StreamID使用样例(版本1.0.2)的更多相关文章
- spark mllib lda 中文分词、主题聚合基本样例
github https://github.com/cclient/spark-lda-example spark mllib lda example 官方示例较为精简 在官方lda示例的基础上,给合 ...
- PAT 1024 科学计数法 (20)(精简版代码+思路+推荐测试样例)
1024 科学计数法 (20)(20 分) 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]"."[0-9]+E[+-][0-9]+, ...
- cmake使用演示样例与整理总结
本文代码托管于github cmake_demo cmake中一些提前定义变量 PROJECT_SOURCE_DIR project的根文件夹 PROJECT_BINARY_DIR 执行cmake命 ...
- C++的性能C#的产能?! - .Net Native 系列《三》:.NET Native部署测试方案及样例
之前一文<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥> 获得很多朋友支持和鼓励,也更让我坚定做这项技术的推广者,希望能让更多的朋友了解这项技术,于是先从官方 ...
- Android OpenCV样例调试+报错处理
1.OpenCV样例调试:<OpenCV Sample - image-manipulations> blog+报错:E/CAMERA_ACTIVITY(17665): Cam ...
- jbpm入门样例
1. jBPM的简介 jBPM是JBOSS下的一个开源java工作流项目,该项目提供eclipse插件,基于Hibernate实现数据持久化存储. 參考 http://www.jbos ...
- java cglib动态代理原理及样例
cglib动态代理: http://blog.csdn.net/xiaohai0504/article/details/6832990 一.原理 代理为控制要访问的目标对象提供了一种途径.当访问 ...
- WebGL自学教程——WebGL演示样例:開始
最终開始WebGL的演示样例了,...... 開始 使用WebGL的步骤,非常easy: 1. 获得WebGL的渲染环境(也叫渲染上下文). 2. 发挥你的想象力,利用<WebGL參考手冊> ...
- PHP初学者如何搭建环境,并在本地服务器(or云端服务器)运行自己的第一个PHP样例
页面底部有PHP代码样例供测试使用. 1.PHP开发,你需要什么? 1)开发代码的工具,可以用IDE名字叫做phpDesigner.当然也可以临时用记事本代替,记得文件扩展名为.php 2)服务器(本 ...
随机推荐
- java代码------计算器
总结:我用if()语句写计算功能的代码时,实现不了,与switch_-catch语句不一样.不知到怎么实现 package com.p; import javax.swing.*; import ja ...
- nginx的编译安装以及启动脚本编写
Nginx的编译安装和启动脚本的编写 Nginxd的功能强大,可以实现代理.负载均衡等企业常用的功能.下面介绍一下nginx的编译安装方法: 1. 下载 官方下载地址:http://nginx.org ...
- ROS6.16开始支持802.11ac了,扫盲下
Wi-Fi的5G频段与802.11AC背后那些事儿本文章来自某路由论坛,作者为张导,本人转载,原地址http://bbs.hiwifi.com/thread-9086-1-1.html 曾几何时,大家 ...
- springmvc和activemq的整合使用
1.简介:ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台 ...
- 20181104_C#线程之Thread_ThreadPool_使用Thread实现回到和带参数的回调
C# .net Framework多线程演变路径: 1.0 1.1 时代使用Thread 2.0 时代使用ThreadPool 3.0 时代使用Task 4.0 时代使用 ...
- JS-用法
JavaScript 用法 HTML 中的脚本必须位于 <script> 与 </script> 标签之间. 脚本可被放置在 HTML 页面的 <body> 和 & ...
- css引用方式
网页中引用CSS样式 内联样式 行内样式表 外部样式表 链接式 导入式 内嵌方式 style标签 <!doctype html> <html> <head> < ...
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡
转载:http://blog.csdn.net/congcong68/article/details/41113239 互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架 ...
- Squid Linux 代理服务器
简介: Squid 是 Linux/Unix 平台下最为流行的高性能免费应用层代理服务器,它具有权限管理灵活.性能高和效率快的特点. 代理服务器可以提供文件缓存.复制和地址过滤等服务,充分利用有限的出 ...
- python时间戳、日期、时间转换
1.str转时间戳 # 字符类型的时间 tss1 = '2013-10-10 23:40:00' # 转为时间数组 timeArray = time.strptime(tss1, "%Y-% ...