jstorm系列-2:入门
有了基本的概念之后,我们用jstorm来做一点小事情吧
做一个很无聊的事情:给定一个时间戳,输出对应的问候语
规则是:时间戳的十位对应的数字对应不同的时间段,0-2代表早上,3代表中午,4-6代表下午,7-9代表晚上,分别输出早上,中午,下午和晚上。
我们用spout来发送时间戳,bolt来处理时间戳并输出对应的问候语,并且统计每一时间段的问候数目,判断时间戳的生成是否随机。
代码如下:
public class TimeStampSpout implements IRichSpout{
private static final long serialVersionUID = 1L;
private SpoutOutputCollector collector;
@Override
。。。。一切没有用到的函数不展示
@Override
public void nextTuple() {
long now = System.currentTimeMillis();
Values tuple = new Values(now);
System.out.println("spout:"+tuple);
this.collector.emit(tuple);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
this.collector = collector;
}
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields("timestamp"));
}
}
public class GreetingBolt implements IRichBolt{
private static final long serialVersionUID = 1L;
private static Map<String, Integer> count = new TreeMap<String, Integer>();
private final String morning = "morning";
private final String noon = "noon";
private final String afternoon = "afternoon";
private final String evening = "evening";
private static Integer total = 0;
@Override
public void cleanup() {
}
@Override
public void execute(Tuple input) {
long timestamp= input.getLong(0);
// System.out.println("bolt:"+timestamp);
total+=1;
// 获取十位数
long second = (timestamp/10)%10;
if(second<3){
System.out.println("bolt:"+morning);
count.put(morning, (count.get(morning)==null)?1:count.get(morning)+1);
}
else if(second==3){
System.out.println("bolt:"+noon);
count.put(noon, (count.get(noon)==null)?1:count.get(noon)+1);
}
else if(second<8){
System.out.println("bolt:"+afternoon);
count.put(afternoon, (count.get(afternoon)==null)?1:count.get(afternoon)+1);
}
else{
System.out.println("bolt:"+evening);
count.put(evening, (count.get(evening)==null?1:count.get(evening)+1));
}
if(total%10==0){
System.out.println("distribution show as followed:");
System.out.println(morning+":"+1.0*((count.get(morning)==null)?0:count.get(morning))/total);
System.out.println(noon+":"+1.0*((count.get(noon)==null?0:count.get(noon)))/total);
System.out.println(afternoon+":"+1.0*((count.get(afternoon)==null?0:count.get(afternoon)))/total);
System.out.println(evening+":"+1.0*((count.get(evening)==null?0:count.get(evening)))/total);
}
}
}
public class TestTopology {
public static void main(String[] args) {
TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("TimeStampSpout", new TimeStampSpout());
builder.setBolt("GreetingBolt",new GreetingBolt()).shuffleGrouping("TimeStampSpout");
LocalCluster cluster = new LocalCluster();
Config config = new Config();
cluster.submitTopology("test", config, builder.createTopology());
}
}
p
jstorm系列-2:入门的更多相关文章
- .NET 4 并行(多核)编程系列之一入门介绍
.NET 4 并行(多核)编程系列之一入门介绍 本系列文章将会对.NET 4中的并行编程技术(也称之为多核编程技术)以及应用作全面的介绍. 本篇文章的议题如下: 1. 并行编程和多线程编程的区别. ...
- Google C++测试框架系列:入门
Google C++测试框架系列:入门 原始链接:V1_6_Primer 注 GTest或者Google Test: Google的C++测试框架. Test Fixtures: 这个词实在找不到对应 ...
- Pandas系列之入门篇
Pandas系列之入门篇 简介 pandas 是 python用来数据清洗.分析的包,可以使用类sql的语法方便的进行数据关联.查询,属于内存计算范畴, 效率远远高于硬盘计算的数据库存储.另外pand ...
- Pandas系列之入门篇——HDF5
Pandas系列之入门篇--HDF5 简介 HDF5(层次性数据格式)作用于大数据存储,其高效的压缩方式节约了不少硬盘空间,同时也给查询效率带来了一定的影响, 压缩效率越高,查询效率越低.pandas ...
- Python系列之入门篇——HDFS
Python系列之入门篇--HDFS 简介 HDFS (Hadoop Distributed File System) Hadoop分布式文件系统,具有高容错性,适合部署在廉价的机器上.Python ...
- Python系列之入门篇——MYSQL
Python系列之入门篇--MYSQL 简介 python提供了两种mysql api, 一是MySQL-python(不支持python3),二是PyMYSQL(支持python2和python3) ...
- 【转】C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。
C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子. 标签: c#objectnewlineexceptionbytestring 2010-05-17 01:10 117109人阅读 ...
- jstorm系列-1:入门
一. Storm整体介绍 Storm 是一个类似Hadoop MapReduce的系统, 用户按照指定的接口实现一个任务,然后将这个任务递交给JStorm系统,Jstorm将这 ...
- pyqt系列原创入门教程
pyqt4入门教程 python pyqt4 PyQt是一个创建GUI应用程序的工具包.它是Python编程语言和Qt库的成功融合.Qt库是目前最强大的库之一. 通过pyqt可以实现很多我们想要的功能 ...
随机推荐
- cf 443 D. Teams Formation](细节模拟题)
cf 443 D. Teams Formation(细节模拟题) 题意: 给出一个长为\(n\)的序列,重复\(m\)次形成一个新的序列,动态消除所有k个连续相同的数字,问最后会剩下多少个数(题目保证 ...
- Java 匿名内部类 只能访问final变量的原因
文章来源:http://blog.sina.com.cn/s/blog_4b6f8d150100qni2.html 1)从程序设计语言的理论上:局部内部类(即:定义在方法中的内部类),由于本身就是在方 ...
- 用ByteArrayOutputStream解决IO流乱码问题
IO中用ByteArrayOutputStream解决乱码问题 --另一种解决乱码的方法 IO中另外一种防止乱码的方法:使用ByteArrayOutputStream在创建ByteArrayOutpu ...
- Codeforces Round #342 (Div. 2) C
C. K-special Tables time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Connections between cities LCA
Problem Description After World War X, a lot of cities have been seriously damaged, and we need to r ...
- NYOJ 745 dp
蚂蚁的难题(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 下雨了,下雨了,蚂蚁搬家了. 已知有n种食材需要搬走,这些食材从1到n依次排成了一个圈.小蚂蚁对每种 ...
- java中String字符串的替换函数:replace与replaceAll的区别
例如有如下x的字符串 String x = "[kllkklk\\kk\\kllkk]";要将里面的“kk”替换为++,可以使用两种方法得到相同的结果 replace(CharSe ...
- centos6.5 配置mongodb3
下载地址 http://www.mongodb.org/downloads 下载 curl -O -L https://fastdl.mongodb.org/linux/mongodb-linux-i ...
- Cropper
jQuery.cropper是一款使用简单且功能强大的图片剪裁jQuery插件.该图片剪裁插件支持图片放大缩小,支持图片旋转,支持触摸屏设备,支持canvas,并且支持跨浏览器使用. 官网:https ...
- iPhoneX页面安全区域与内容重叠问题
转载自:https://www.cnblogs.com/lolDragon/p/7795174.html 1. iPhoneX的介绍 屏幕尺寸 我们熟知的iPhone系列开发尺寸概要如下: △ iP ...