第一个Apache Storm v2.0流计算入门项目的开发、测试和运行(IDEA/Maven)
![fff4628c921a8bbfc3444197ddc50783.png](https://i-blog.csdnimg.cn/blog_migrate/ea2558901d0bce51f6d72994532b294b.jpeg)
关于流计算框架Apache Storm最新版的安装,可以参考:
流计算框架-最新版Apache Storm v2.0单机模式安装详细步骤
流计算框架Apache Storm核心概念、架构设计
一、基于IDEA/Maven创建一个Storm应用
应用名称:firststorm
![8eb093ab1067488e1047f88865a31e2d.png](https://i-blog.csdnimg.cn/blog_migrate/b374a74f1bb3f651bee697396dc081ac.jpeg)
二、添加storm-client的Maven jar包依赖
storm-client 依赖包信息,添加到项目的pom.xml文件中。
org.apache.storm
storm-client
2.0.0
![cc34ddbfb38cde5941410d3e12d5dfb5.png](https://i-blog.csdnimg.cn/blog_migrate/60eb6d55d05e940c36aeaed245426d59.jpeg)
maven会自动下载相关依赖并放到Maven Dependencies下,这些jar包可以点击下拉查看,并且会自动添加到项目classpath中,作为编译使用,等jar包全部下载完毕,现在开始编写具体的计算逻辑了,在这个项目中我们把所有的类都建立在包com.rickie.bigdata.firststorm下。
![8b71f10f440fc89ebe4c50592256453e.png](https://i-blog.csdnimg.cn/blog_migrate/f82274cf096072c1fb2796a039a4c56c.jpeg)
storm提供了两种运行模式:本地模式(Local Mode)和分布式模式。本地模式针对开发调试storm topologies非常有用。
因为多数程序开发者都是使用windows系统进行程序开发,如果在本机不安装storm环境的情况下,如何在本地开发、调试storm程序呢?你可以参考本文提供的解决方案。
如下来自Storm 官方文档:
http://storm.apache.org/releases/2.0.0-SNAPSHOT/Local-mode.html
Local Mode
Local mode simulates a Storm cluster in process and is useful for developing and testing topologies. Running topologies in local mode is similar to running topologies on a cluster.
To run a topology in local mode you have two options. The most common option is to run your topology with storm local instead of storm jar.
This will bring up a local simulated cluster and force all interactions with nimbus to go through the simulated cluster instead of going to a separate process.
If you want to do some automated testing but without actually launching a storm cluster you can use the same classes internally that storm local does.
To do this you first need to pull in the dependencies needed to access these classes. For the java API you should depend on storm-server as a test dependency.
To create an in-process cluster, simply use the LocalCluster class.
如上文所述,使用本地模式(Local Mode),需要先引入storm-server 依赖包。
org.apache.storm
storm-server
2.0.0
test
![fbafaabef25ef98d617d265256494dda.png](https://i-blog.csdnimg.cn/blog_migrate/9c2c2a6daaadac0585c8d0c44072a0b7.jpeg)
引入的storm-server 依赖包。
![24431dfc6062fc37fcf14b7fe647055e.png](https://i-blog.csdnimg.cn/blog_migrate/d2c9a22457907a8f79219a0a6c8c652a.jpeg)
在本地模式上运行topology类似在一个集群上运行topology。
创建一个本地集群,大致代码如下所示:
- import org.apache.storm.LocalCluster;
- LocalCluster cluster = new LocalCluster();
- 提交集群使用submitTopology,
- 杀死集群使用killTopology
- 关闭一个本地集群使用cluster.shutdown();
完整代码可以参考下面。
三、Storm 应用的代码逻辑开发
(1)首先建立RandomSpout类作为数据源,并且继承于父类BaseRichSpout,确定后可以看到系统自动补全3个方法:nextTuple,open和declareOutputFields。
![a54c793910578beb8c42870682de3b72.png](https://i-blog.csdnimg.cn/blog_migrate/92744bd4bd1c13124892eeadfccd46e3.jpeg)
我们现在就需要重写这3个方法,open方法是数据源的初始化,nextTuple的作用是把Tuple发送至下游,declareOutputFields用来定义输出字段,下面我们手动分配一个数组,并且随机取里面的元素,代码如下:
package com.rickie.bigdata;
import org.apache.storm.spout.SpoutOutputCollector;
import org.apache.storm.task.TopologyContext;
import org.apache.storm.topology.OutputFieldsDeclarer;
import org.apache.storm.topology.base.BaseRichSpout;
import org.apache.storm.tuple.Fields;
import org.apache.storm.tuple.Values;
import java.util.Map;
import java.util.Random;
public class RandomSpout extends BaseRichSpout {
private SpoutOutputCollector collector;
private static String[] words = {"Rickie