Storm之spout,bolt编写
Storm,核心代码使用clojure书写,实用程序使用python开发,使用java开发拓扑。
Nimbus节点接收到请求,对提交的拓扑进行分片,分成一个个的task,并将task和supervisor相关的信息提交到zookeeper集群上,supervisor会去zookeeper集群上领自己的task,通知自己的worker进程进行Task的处理。
Spout的主要方法:
open(Map conf,TopologyContext context,SpoutOutputCollector collector) close() nextTuple() ack(Object msgId) fail(Object msgId)
open() :初始化方法
close():spout将要关闭时调用,但是不保证其一定被调用,因为在集群中supervisor节点,可以使用kill -9来杀死worker进程,只用storm是在本地模式下运行,如果是发送停止命令,是可以保证close执行的。
declareOutputFields方法:
声明要输出的tuple的字段名称。
void ack(Object msgid)
成功处理tuple时回调的方法,通常情况下,此方法的实现是将消息队列中的消息移除,防止重发。
void fail(Object msgid)
处理tuple失败时的回调方法,通常情况下,此方法的实现是将消息放回消息队列中然后在稍后时间里重发。
nextTuple()
Storm框架会一直调用此方法,输出无级到outputcollector.这种方法应该是非阻塞的。nextTuple,ack and fail都在spout任务的同一个线程中被循环调用。
public void nextTuple() {
this.collector.emit(new Values(sentences[index]));
index++;
if (index >=sentences.length) {
index=0;
}
Utils.sleep(1);
}
通常情况下,实现一个spout,可以直接实现IRichSpout,或者直接继承BaseRichSpout,可以少写些许代码。
Bolt
prepare()此方法与spout中的open()或mapper/reducer中的setup方法类似,在Task初始化时调用,它提供了bolt的执行环境。
void cleanup()在关闭前调用,同样不保证其一定执行。
execute()方法 接收一个tuple并进行处理,并用prepare方法传入的outputcollector的ack方法或fail来反馈处理结果。
实现bolt,可以实现irichbolt接口或继承baseRichbolt,如果自己不想处理结果反馈,可以实现IbaseBolt接口或继承BaseBasicBolt,它实际上自动实现了collector.emit.ack(inputtuple).
Storm之spout,bolt编写的更多相关文章
- Storm中Spout使用注意事项小结
Storm中Spout用于读取并向计算拓扑中发送数据源,最近在调试一个topology时遇到了系统qps低,处理速度达不到要求的问题,经过排查后发现是由于对Spout的使用模式不当导致的多线程同步等待 ...
- 关于storm的Spout、Bolt、及其可靠性
本文导读: Component全家谱结构图 Spout分析 ——类图 ——分析(接口实现).结论 ——可靠的与不可靠的消息(推荐) Bolt分析 ——类图 ——分析(接口实现).结论 ——可靠的与不 ...
- Storm概念学习系列之Topology拓扑
不多说,直接上干货! Hadoop 上运行的是 MapReduce 作业,而在 Storm 上运行的是拓扑 Topology,这两者之间是非常不同的.一个关键的区别是:一个MapReduce 作业 ...
- [Storm] No data flows into bolt
最近在HDP2.1的HBase环境中安装了一个Storm测试机器(单节点,JDK8),遇到了几个问题,记录下来. 尝试步骤 1. 使用和HBase一样HDP版本,直接安装Storm yum insta ...
- storm的数据源编程单元Spout学习整理
Spout呢,是Topology中数据流的源头,也是Storm针对数据源的编程单元.一般数据的来源,是通过外部数据源来读取数据项(Tuple),并读取的数据项传输至作业的其他组件.编程人员一般可通过O ...
- storm spout的速度抑制问题
转发请注明原文地址:http://www.cnblogs.com/dongxiao-yang/p/6031398.html 最近协助同事优化一个并发消费kafka数据用来计算的任务,压测过程中发现有两 ...
- Storm Spout
本文主要介绍了Storm Spout,并以KafkaSpout为例,进行了说明. 概念 数据源(Spout)是拓扑中数据流的来源.一般 Spout 会从一个外部的数据源读取元组然后将他们发送到拓扑中. ...
- Storm介绍及与Spark Streaming对比
Storm介绍 Storm是由Twitter开源的分布式.高容错的实时处理系统,它的出现令持续不断的流计算变得容易,弥补了Hadoop批处理所不能满足的实时要求.Storm常用于在实时分析.在线机器学 ...
- storm学习
一 storm 相关术语 . Nimbus storm 集群主节点,负责资源分配和任务调度.(相当于namenode) . supervisor storm集群工作节点,接受Nimbu分配任务,管理w ...
随机推荐
- python代码风格-PEP8
转载自http://www.douban.com/note/134971609/ Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下 ...
- 最小生成树Kruskal算法(邻接矩阵和邻接表)
最小生成树,克鲁斯卡尔算法. 算法简述: 将每个顶点看成一个图. 在所有图中找权值最小的边.将这条边的两个图连成一个图, 重复上一步.直到只剩一个图. 注:将abcdef每个顶点看成一个图.将最小权值 ...
- 状态压缩DP---Hie with the Pie
http: //acm.hust.edu.cn/vjudge/contest/view.action?cid=110044#problem/B Description The Pizazz Pizze ...
- UVA 10090 - Marbles 拓展欧几里得
I have some (say, n) marbles (small glass balls) and I am going to buy some boxes to store them. The ...
- 蒙特卡洛树搜索算法(UCT): 一个程序猿进化的故事
前言: 本文是根据的文章Introduction to Monte Carlo Tree Search by Jeff Bradberry所写. Jeff Bradberry还提供了一整套的例子,用p ...
- linux压缩和解压命令总结
一.tar.gz tar -xzvf 二.tar.bz2 tar.bz2 解压命令 bzip2 -d gcc-4.1.0.tar.bz2---上面解压完之后执行下面的命令.执行成功后,会解压生成一个 ...
- redis3.0 集群实战1 -- 安装和配置
本文主要是在centos7上安装和配置redis集群实战 参考: http://hot66hot.iteye.com/blog/2050676 集群教程: http://redisdoc.com/to ...
- 原生js验证简洁美观注册登录页面
序 一个以js验证表单的简洁的注册登录页面,不多说直接上图 效果 主要文件 完整代码 sign_up.html 注册表单 <!DOCTYPE html> <html lang=&qu ...
- c#多线程生产者消费者(手稿)
屋舍简陋,隔壁的娃娃哭了一晚,心中无恶意纯中性的想,有病就赶紧带孩子去看医生吧,能哭这么久估计孩子真的不舒服.
- CKEditor与CKFinder的配置
CKEditor与CKFinder的配置使用(一) 将CKEditor 与 CKFinder 的包含在项目中 从http://cksource.com网站上下载CKEditor与CKFinder,并将 ...