storm定时任务【tick】
- 继承BaseBasicBolt
- getComponentConfiguration方法设置发送ticktuple间隔时间(单位s)
- execute方法判断tuple类型,如果为ticktuple处理定时任务,如果不是处理其他任务。
//继承 BaseBasicBolt
public class CountTickBolt extends BaseBasicBolt {
private static final Logger logger = LoggerFactory.getLogger(CountTickBolt.class);
private Map<String, Integer> count;
private Long time; @Override
public Map<String, Object> getComponentConfiguration() {
//设置发送ticktuple的时间间隔
Config conf = new Config();
conf.put(conf.TOPOLOGY_TICK_TUPLE_FREQ_SECS, 5);
return conf;
} @Override
public void prepare(Map stormConf, TopologyContext context) {
super.prepare(stormConf, context);
count = new HashMap<String, Integer>();
time = System.currentTimeMillis();
} @Override
public void cleanup() {
super.cleanup();
} @Override
public void execute(Tuple input, BasicOutputCollector collector) {
//判断是否为tickTuple
if (input.getSourceComponent().equals(Constants.SYSTEM_COMPONENT_ID) &&
input.getSourceStreamId().equals(Constants.SYSTEM_TICK_STREAM_ID)){
//是,处理定时任务
Long nowTime = System.currentTimeMillis();
Long useTime = nowTime - time;
StringBuffer sb = new StringBuffer();
sb.append("======== Use Time :" + useTime + "========\r\n");
for (Map.Entry wordCount : count.entrySet()){
sb.append(wordCount.getKey() + "------>" + wordCount.getValue() + "\r\n");
}
Long nnTime = System.currentTimeMillis();
logger.info(sb.toString() + (nnTime - nowTime) );
time = nnTime;
}else {
//否,处理其他数据
String word = input.getString(0);
if (count.containsKey(word)){
int thisWordCont = count.get(word);
count.put(word, ++thisWordCont);
}else {
count.put(word,1);
}
}
} @Override
public void declareOutputFields(OutputFieldsDeclarer declarer) { }
- 如何设置此拓扑中所有的spout和bolt都定时处理。
- 由于是tuple类型数据,当正常tuple数据量过大时是否会造成tickTuple延时消费。
storm定时任务【tick】的更多相关文章
- Storm编程入门API系列之Storm的定时任务实现
概念,见博客 Storm概念学习系列之storm的定时任务 Storm的定时任务,分为两种实现方式,都是可以达到目的的. 我这里,分为StormTopologyTimer1.java 和 Sto ...
- Storm编程入门API系列之Storm的Topology的stream grouping
概念,见博客 Storm概念学习系列之stream grouping(流分组) Storm的stream grouping的Shuffle Grouping 它是随机分组,随机派发stream里面的t ...
- Storm编程入门API系列之Storm的可靠性的ACK消息确认机制
概念,见博客 Storm概念学习系列之storm的可靠性 什么业务场景需要storm可靠性的ACK确认机制? 答:想要保住数据不丢,或者保住数据总是被处理.即若没被处理的,得让我们知道. publi ...
- Spark Streaming笔记——技术点汇总
目录 目录 概况 原理 API DStream WordCount示例 Input DStream Transformation Operation Output Operation 缓存与持久化 C ...
- Spark学习笔记(三)-Spark Streaming
Spark Streaming支持实时数据流的可扩展(scalable).高吞吐(high-throughput).容错(fault-tolerant)的流处理(stream processing). ...
- Storm框架:如何实现crontab定时任务
Storm除了能对消息流进行处理,还能实现crontab定时任务. 只要在bolt中配置TOPOLOGY_TICK_TUPLE_FREQ_SECS项即可实现. @Override public Map ...
- 关于Storm tick
关于Storm tick 1. tick的功能 Apache Storm中内置了一种定时机制——tick,它能够让任何bolt的所有task每隔一段时间(精确到秒级,用户可以自定义)收到一个来自__s ...
- Storm中的定时任务
1.全局定时器 import java.util.Map; import backtype.storm.Config; import backtype.storm.Constants; import ...
- storm的定时任务
应用场景: 第一种方法 参考代码StormTopologyTimer1.java package yehua.storm; import java.util.Map; import org.apach ...
随机推荐
- 浅谈echo、print、var_dump()、print_r()的区别
1.echo 和 print 的区别 共同点:首先echo 和 print 都不是严格意义上的函数,他们都是语言结构;他们都只能输出 字符串,整型跟int型浮点型数据.不能打印复合型和资源型数据: 而 ...
- 深度学习开发环境搭建教程(Mac篇)
本文将指导你如何在自己的Mac上部署Theano + Keras的深度学习开发环境. 如果你的Mac不自带NVIDIA的独立显卡(例如15寸以下或者17年新款的Macbook.具体可以在"关 ...
- 优雅地解决Ajax接口参数来自另一个接口的问题
最近闲赋在家,终于有时间回顾我在工作中遇到的一些东西,由于经验不足,有些方面做的不是很好.在上家公司曾经遇到一个小问题,就是Ajax的接口中有参数是从另一个接口后台传来的.当时我的做法是将需要参数的接 ...
- CF Manthan, Codefest 16 G. Yash And Trees 线段树+bitset
题目链接:http://codeforces.com/problemset/problem/633/G 大意是一棵树两种操作,第一种是某一节点子树所有值+v,第二种问子树中节点模m出现了多少种m以内的 ...
- 拦截器的四种拦截方式以及Filter的执行顺序(17/4/8)
一:拦截方式 需要在配置文件web.xml配置 在对应filter-mapping节点下 如下 <filter-mapping> <filter-name>BFilter< ...
- 局域网内补丁更新80072EE2错误
在公网中,80072ee2通常是在进行自动更新时遇到的连接性错误.通常由于三防杀毒软件或者浏览器,代理服务器设置不正确而导致的.那么如果是在局域网中遇到该问题,该如何解决呢? 错误截图: 1.首先确认 ...
- sass入门学习篇(一)
先简单的介绍一下sass,如果你了解less,sass就没什么太大问题 Sass 是对 CSS 的扩展,让 CSS 语言更强大.优雅. 它允许你使用变量.嵌套规则. mixins.导入等众多功能, 并 ...
- Java项目中的一些注意事项
一.关于包命名方式 例如:com.sun.spring.xxx.service.impl 第一级:公司域名的倒序com.sun 第二级:项目名称spring 第三级:模块信息xxx 第四级:功能顶层包 ...
- Linux学习之要点必备
在本节课中我将会带领大家秒懂linux命令 要点一:常见基本命令格式 命令名称+选项+参数 例如:#mkdir -r /var/ruofeng/001/ 我们通过逐级创建目录方式解释这个例子,mkdi ...
- CSS中的字体设置
五大类:serif, sans-serif, monospace, cursive, fantasy serif 衬线字体,如 Big Caslon, 宋体 sans-serif 非衬线字体,如 He ...