软件版本:Storm:0.9.3 ,Redis:2.8.19;jedis:2.6.2;
参考:http://storm.apache.org/documentation/Understanding-the-parallelism-of-a-Storm-topology.html
一、Storm原理
Storm简述:Storm中有两个组件:nimbus和supervisor,nimbus主要负责分配资源和schedule和协调任务,supervisor主要启动worker,每个worker可以启动一个到多个executor,一个executor可以启动一个到多个task,(默认一个executor对应一个task)实际执行任务的是task。
二、Storm编程
1. Topology (拓扑)
1.1 定义spout、bolt以及其关系
//Topology definition
TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("wc-spout",new WCSpout(),Integer.parseInt(args[2]));
builder.setBolt("split-bolt", new SplitBolt(),Integer.parseInt(args[3]))
.shuffleGrouping("wc-spout");
builder.setBolt("count-bolt", new CountBolt(),Integer.parseInt(args[4]))
.fieldsGrouping("split-bolt", new Fields("word"));
在设置spout和bolt的时候还可以设置并行的个数,即executor的个数,当然也可以设置task的个数,如下代码,两个executor,四个task,则每个executor配置两个task。
topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2)
.setNumTasks(4)
.shuffleGrouping("blue-spout);
<代码来自:
http://storm.apache.org/documentation/Understanding-the-parallelism-of-a-Storm-topology.html>
1.2 配置参数项(在spout和bolt中可通过此项设置获取参数值)
// 定义Configuration
Config conf = new Config();
conf.put("storeFrequent", Long.parseLong(args[0]));
conf.put("slow_fast", args[5]);
conf.put("printWC", args[6]);
conf.setNumWorkers(Integer.parseInt(args[1]));
上面的代码除了设置三个变量值之外,还设置了worker的数量;
1.3 提交Topology
集群提交方式:
// 提交任务
StormSubmitter.submitTopology("wc-redis", conf,builder. createTopology());
其中的“wc-redis”是Topology的名字,后面两个是基本的模式写法,可以就按照上面的写即可。
单机提交方式:
LocalCluster cluster = new LocalCluster();
cluster. submitTopology("wc-redis", conf,
builder. createTopology());
2.1 继承BasiRichSpout
继承这个类后,定义一个域变量SpoutOutputCollector collector,这个用于输出;
2.2 覆写open方法
public void open(@SuppressWarnings("