storm的数据源编程单元Spout学习整理
Spout呢,是Topology中数据流的源头,也是Storm针对数据源的编程单元。一般数据的来源,是通过外部数据源来读取数据项(Tuple),并读取的数据项传输至作业的其他组件。编程人员一般可通过OutputFieldsDeclarer类的declareStream()方法来声明多个流,指定数据将要发送的流,然后使用SpoutOutputCollector的emit方法将数据发送。
这里整理了下ISpout和IComponent接口。
ISpout声明了Spout的核心方法,用于向Topology供给数据项。对于每一个发出的数据项,Storm通过Spout,可以追踪它经历处理过程的有向无环图(竟然也是DAG)。
void open (java,util.Map conf,TopologyContext context,SpoutOutputCollector collector) 用于实例化Spout的一个运行时任务,被急群众的某一进程调用 (conf对象维护Storm中针对该Spout的配置信息,context是一个上下文对象,可用于获取该组件运行时任务的信息,collector用于从该Spout发送数据项)void close() 用于停止一个Spoutvoid activate() 在Spout从非激活状态转换为激活状态时被调用void deactivate() 在Spout的非激活状态被调用 void ack(java.lang.Object msgId)Storm用于确认该Spout发送的这个数据项已经被完整处理void fail(java.lang.Object msgId) Storm用于确认该Spout发送的这个数据项已经失败void nextTuple() 当这个方法被调用时,Storm要求Spout发送一个数据项至output collector (nextTuple是Spout向Topology中发送一个数据项,是Spout需要实现的最重要的方法。在可靠的Spout的一个任务中,nextTuple()、ack()、fail()三个方法的调用在一个单独线程中循环。当不存在数据项需要发送时,nextTuple()将会休眠一小段间隔,确保不会浪费过多的CPU资源)
IComponent接口,声明了Topology组件的通用方法。使用JAVA语言的Spout和Bolt都必须实现这个接口。
void declareOutputFields(OutputFieldsDeclarer declarer) 声明指定输出流的数据项结构。(这里指定了输出流的数据项结构(schema)。参数declarer被用来声明输出流(stream)的id,域。java.util.Map getComponentConfiguration() 获取组件的配置信息
以Storm官网的WordCount来说明就是:
public class WordCount extends BaseRichSpout {public static Logger log = logger.getLogger(backtype/storm/testing/WordCount);boolean_isDistributed;SpoutOutputCollector_collector;public WordCount(){this(true);}public WordCount(boolean isDistributed){_isDistributed = isDistributed;}public void open(Map conf,TopologyContext context,SpoutOutputCollector collector){_collector = collector;}public void close(){}public void nextTuple(){Utils.sleep(100L);String words[] = {"nathan","mike","jackson","golda","bertels"};public void ack(Object obj){}public void fail(Object obj){}public void declareOutputFields(OutputFieldsDeclarer declarer){declarer.declarer(new Fields(new String[] {"word"}));}public Map getComponentConfiguration(){if(!_isDistributed_){Map ret = new HashMap();ret.put(Config.TOPOLOGY_MAX_TASK_PARALLELISM,Integer.valueOf(1)); }else{return null;}} }
1、类中有对WordCount的两个重载的构造函数,其中_isDistributed指明了Spout的并行度,若_isDistributed=false,则意味着这个Spout运行时仅有一份任务实例。
2、open()函数的实现,将传入的collector赋值给局部变量,使之后通过该局部变量来操作数据项的发送。
3、declareOutputFields()函数,生命了输出流的数据项结构。
4、nextTuple函数,让一只执行的线程休眠100毫秒,再继续执行下述函数体,通过线程的休眠,控制nextTuple()产生数据项的周期为0.1秒。并且在维护字符串数组中,随机挑选一个字符串,作为"word"的域,交给变量collector作为一个Tuple发送。 (ack的作用是确认数据项是否被完整处理,这里没做处理)
5、getComponentConfiguration()函数则返回组建的配置信息(这个实例中只有在_isDistributed=false时,才返回包含该配置项的Map数据结构。
6、其他重载函数都为空实现。
那么在Topology实现类的main函数使其作为一个spout:
TopologyBuilder builder = new TopologyBuilder();builder.setSpout("sentenceGenSpout",new WordCount());
转载于:https://www.cnblogs.com/yangsy0915/p/5125906.html
storm的数据源编程单元Spout学习整理相关推荐
- Storm架构和编程模型总结
1. 编程模型 DataSource:外部数据源 Spout:接受外部数据源的组件,将外部数据源转化成Storm内部的数据,以Tuple为基本的传输单元下发给Bolt Bolt:接受Spout发送的数 ...
- Python GUI编程-了解相关技术[整理]
Python GUI编程-了解相关技术[整理] 我们可以看到,其实python进行GUI开发并没有自身的相关库,而是借用第三方库进行开发.tkinter是tcl/tk相关,pyGTK是Gtk相关,wx ...
- Java设计模式(学习整理)---命令模式
设计模式之Command(学习整理) 1.Command定义 不少Command模式的代码都是针对图形界面的,它实际就是菜单命令,我们在一个下拉菜单选择一个命令时,然后会执行一些动作. 将这些命令封装 ...
- ACM竞赛学习整理开篇之01背包问题
ACM竞赛学习整理开篇之01背包问题. 最近,偶然的一次机会让我关注信息奥赛的一些内容.发现其中的内容很有趣,是学习编程的一条很好的路径,又能很好地将数学和编程联系到一起.在csdn里看到了不少同好也 ...
- Vue-Cli 学习整理【转载】
Vue-Cli 学习整理 坚果 程序猿/艺术 关注他 21 人赞同了该文章 1. vue-cli(vue脚手架)全集 1.1. vue-cli2脚手架 1.1.1. nodejs/npm环境安装 1 ...
- Spring Boot 2.0 多数据源编程 jdbcUrl is required with driverClassName
转载:https://my.oschina.net/chinesedragon/blog/1647846 Spring Boot 2.0 多数据源编程 在Spring Boot 1.5.x之前,多数据 ...
- c语言谭浩强ppt课件,编程_C语言学习课件_谭浩强_PPT~1216F.ppt
编程_C语言学习课件_谭浩强_PPT~1216F.ppt ,第一章,C语言概述本章要点,C语言的特点 C程序的结构 在计算机上运行C程序的方法主要内容,1.1 语言出现的历史背景 1.2 程序的特点 ...
- HTML CSS 学习整理
HTML CSS 学习整理 码字不易,转载请务必注明原文出处.常用单位整理,不断学习,后期的新增笔记会继续加到文章上方 点击链接后退页面: 回到上一个网页 这是一个简单的跳转页面操作 --修改plac ...
- Python学习整理(之一)
Python 学习整理 数据类型,函数,运算符,bool值,选择结构 Python 学习整理 一,基本的参数类型 二,函数 print()函数 input()函数和int(),float() 三,运算 ...
最新文章
- [转]python yield
- sysbench OLTP基准测试
- 小数在内存中的存储表示
- verilog时钟翻转怎么写_verilog实时可调时钟代码
- 企业运维几百个重点面试题汇总(老男孩)
- According to the overall view of the patent
- php array_diff 用法
- fasfdfs安装记录(CentOS7)
- 图片压缩兼修改md5
- 鸿蒙系统是华容网格吗,鸿蒙上手机还在迟疑,国内对手却已悄然来到
- bugku——蹭网先解开密码(EWSA,hashcat破解wifi握手包)
- android webview打开pdf文件
- ASP.NET MVC入门
- 配置IIS,以及添加网站
- VPS,虚拟主机,云主机,独立服务器区别
- 如何做好软文推广?软文推广有哪些宣传平台值得推荐
- 如何解决因涉及不良信息导致QQ互联审核不通过?
- 第十二届蓝桥杯第二期模拟赛(java) python解法
- matlab在二维平面和三维空间中绘制圆形
- 做个表白页面需要掌握哪些英语单词?