下图为Strom的运行流程图,在开发Storm流处理程序时,我们需要采用内置或自定义实现(数据源)和(处理单元),并通过将它们之间进行关联,形成。

接口定义了Topology中所有组件(spout/bolt)的公共方法,自定义的spout或bolt必须直接或间接实现这个接口。
自定义的spout需要实现接口,它定义了spout的所有可用方法:
通常情况下,我们实现自定义的Spout时不会直接去实现接口,而是继承。继承自,同时实现了接口。

接口继承自和,自身并没有定义任何方法:
抽象类空实现了中方法:
继承自类并实现了接口,并且空实现了其中部分方法:
通过这样的设计,我们在继承实现自定义spout时,就只有三个方法必须实现:
- open : 来源于ISpout,可以通过此方法获取用来发送tuples的;
- nextTuple :来源于ISpout,必须在此方法内部发送tuples;
- declareOutputFields :来源于IComponent,声明发送的tuples的名称,这样下一个组件才能知道如何接受。
bolt接口的设计与spout的类似:
同样的,在实现自定义bolt时,通常是继承抽象类来实现。继承自抽象类并实现了接口。

接口继承自和,自身并没有定义任何方法:
通过这样的设计,在继承实现自定义bolt时,就只需要实现三个必须的方法:
- prepare: 来源于IBolt,可以通过此方法获取用来发送tuples的;
- execute:来源于IBolt,处理tuples和发送处理完成的tuples;
- declareOutputFields :来源于IComponent,声明发送的tuples的名称,这样下一个组件才能知道如何接收。
这里我们使用自定义的产生词频数据,然后使用自定义的和来进行词频统计。

案例源码下载地址:storm-word-count
1. 项目依赖
2. DataSourceSpout
上面类使用方法来产生模拟数据,产生数据的格式如下:
3. SplitBolt
4. CountBolt
5. LocalWordCountApp
通过TopologyBuilder将上面定义好的组件进行串联形成 Topology,并提交到本地集群(LocalCluster)运行。通常在开发中,可先用本地模式进行测试,测试完成后再提交到服务器集群运行。
6. 运行结果
启动的main方法即可运行,采用本地模式Storm会自动在本地搭建一个集群,所以启动的过程会稍慢一点,启动成功后即可看到输出日志。

提交到服务器的代码和本地代码略有不同,提交到服务器集群时需要使用进行提交。主要代码如下:
为了结构清晰,这里新建ClusterWordCountApp类来演示集群模式的提交。实际开发中可以将两种模式的代码写在同一个类中,通过外部传参来决定启动何种模式。
打包后上传到服务器任意位置,这里我打包后的名称为
使用以下命令提交Topology到集群:
出现则代表提交成功:


使用UI界面同样也可进行停止操作,进入WEB UI界面(8080端口),在中点击对应Topology 即可进入详情页面进行操作。

在上面的步骤中,我们没有在POM中配置任何插件,就直接使用进行项目打包,这对于没有使用外部依赖包的项目是可行的。但如果项目中使用了第三方JAR包,就会出现问题,因为打包后的JAR中是不含有依赖包的,如果此时你提交到服务器上运行,就会出现找不到第三方依赖的异常。
这时候可能大家会有疑惑,在我们的项目中不是使用了这个依赖吗?其实上面之所以我们能运行成功,是因为在Storm的集群环境中提供了这个JAR包,在安装目录的lib目录下:

为了说明这个问题我在Maven中引入了一个第三方的JAR包,并修改产生数据的方法:
这个方法在和中都有,原来的代码无需任何更改,只需要在时指明使用。
此时直接使用打包运行,就会抛出下图的异常。因此这种直接打包的方式并不适用于实际的开发,因为实际开发中通常都是需要第三方的JAR包。

想把依赖包一并打入最后的JAR中,maven提供了两个插件来实现,分别是和。鉴于本篇文章篇幅已经比较长,且关于Storm打包还有很多需要说明的地方,所以关于Storm的打包方式单独整理至下一篇文章:
Storm三种打包方式对比分析
- Running Topologies on a Production Cluster
- Pre-defined Descriptor Files
更多大数据系列文章可以参见个人 GitHub 开源项目: 程序员大数据入门指南
- Storm 系列(五)—— Storm 编程模型详解
一.简介 下图为 Strom 的运行流程图,在开发 Storm 流处理程序时,我们需要采用内置或自定义实现 spout(数据源) 和 bolt(处理单元),并通过 TopologyBuilder 将它 ...
- 分布式流处理框架 Apache Storm —— 编程模型详解
一.简介 二.IComponent接口 三.Spout 3.1 ISpout接口 3.2 BaseRichSpout抽象类 四.Bolt 4.1 IBolt 接口 4. ...
- MapReduce编程模型详解(基于Windows平台Eclipse)
本文基于Windows平台Eclipse,以使用MapReduce编程模型统计文本文件中相同单词的个数来详述了整个编程流程及需要注意的地方.不当之处还请留言指出. 前期准备 hadoop集群的搭建 编 ...
- Java8学习笔记(五)--Stream API详解[转]
为什么需要 Stream Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念.它也不同于 StAX 对 ...
- Hadoop学习之路(8)Yarn资源调度系统详解
文章目录 1.Yarn介绍 2.Yarn架构 2.1 .ResourceManager 2.2 .ApplicationMaster 2.3 .NodeManager 2.4 .Container 2 ...
- spark wordcount 编程模型详解
spark wordcount中一共经历多少个RDD?以及RDD提供的toDebugString 在控制台输入spark-shell 系统会默认创建一个SparkContext sc h ...
- 云时代架构阅读笔记五——Java内存模型详解(一)
什么是Java内存模型 Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的访问差异,以实现让Java程序在各种平台下都能达到一致 ...
- Webwork 学习之路【04】Configuration 详解
Webwork做为经典的Web MVC 框架,个人觉得源码中配置文件这部分代码的实现十分考究. 支持自定义自己的配置文件.自定义配置文件读取类.自定义国际化支持. 可以作为参考,单独引入到其他项目中, ...
- Docker学习之路(二)DockerFile详解
Dockerfile是一个镜像的表示,可以通过Dockerfile来描述构建镜像的步骤,并自动构建一个容器 所有的 Dockerfile 命令格式都是: INSTRUCTION arguments 虽 ...
- visualsvn server 提交修改日志
修改日志时遇到以下错误: Repository has not been enabled to accept revision propchanges;ask the administrator to ...
- 办ZigBee实验SmartRF Flash Programmer软件界面无法打开
开SmartRF Flash Programmer: 打开任务管理器.在任务管理器里右键点击.将其最大化: 将最大化的界面拖动到屏幕中间: 然后关闭SmartRF Flash Programmer,之 ...
- arcserver开发小结(二)
一.关于服务器上下文 1,服务器上下文(ServerContext)本质上是一个GIS服务器上的进程,它是服务器端编程的起点. 2,只有本地资源才能得到服务器上下文,通常得到服务器上下文的主线是: M ...
- WPF 图片灰度处理
原文:WPF 图片灰度处理 文章的内容是来自微软中文技术论坛的一个帖子,当时是想将一段将图片灰度处理的代码转换为XAML的一个样式,在这里要谢谢 Xiao Yan Qiang.Sheldon _Xia ...
- ARIES算法简介
intro 日志顺序号(LSN) 支持物理逻辑redo.它是物理的,但在页内它可能是逻辑的. 使用脏页表来最大限度地减少恢复时不必要的重做. 使用模糊检查点机制,只记录脏页信息和相关的信息,甚至不要求 ...
- [数字dp] hdu 3271 SNIBB
意甲冠军:有两个查询: q=1.在[x,y]间隔,兑换b十进制,数字和m多少个月. q=2.在[x,y]间隔,兑换b十进制,数字是m第一k的数目是多少(十进制),没有输出由给定的主题. 思维: 和比特 ...
- C# Thread 参数
Thread (ParameterizedThreadStart) 初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托. Thread (ThreadStart) 初 ...
- .NET CORE EnvironmentVariable
.NET CORE System variables SETIn System variablese.g1:Variable name: ASPNETCORE_ENVIRONMENTVariable ...
- 自绘LISTVIEW的滚动条(Delphi实现)
因项目需要准备对LISTVIEW的滚动条进行自绘.于是在网上搜了一下,问题没解决,却搜出一篇令人不愉快的帖子 .确实,那时候实力是不够的,但现在应该是没问题了,为这个目的才不断磨练自己的. LISTV ...
- 使用checkpoint做代理服务器
version:R80.30 T200 Step 1:编辑刀片的属性,开启http/https代理,如下图: Step 2:配置访问策略,如下图: Step 3:配置客户端浏览器如下图: Step 4 ...
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/qdvuejs/58342.html