1、安装一个zookeeper集群
2、上传storm的安装包,解压 cd/home/hadoop
cd /home/hadoop/app/apache-storm-0.9.2-incubating/conf
3、修改配置文件storm.yaml
#所使用的zookeeper集群主机
storm.zookeeper.servers:
- “zjgm01”
- “zjgm02”
- “zjgm03”
#nimbus所在的主机名
nimbus.host: “zjgm01”
cd /home/hadoop/app/apache-storm-0.9.2-incubating/bin
zjgm01
启动storm
在nimbus主机上
./storm nimbus
./storm ui
zjgm02 zjgm03
在supervisor主机上
./storm supervisor
OkBolt
package com.zhongruan.storm;
import backtype.storm.task.TopologyContext;
import backtype.storm.topology.BasicOutputCollector;
import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.topology.base.BaseBasicBolt;
import backtype.storm.tuple.Tuple;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Map;
import java.util.UUID;
public class OkBolt extends BaseBasicBolt {
FileWriter fileWriter=null;
public void prepare(Map stormConf, TopologyContext context) {
try {
fileWriter=new FileWriter("/home/hadoop/stormdata/"+ UUID.randomUUID());
} catch (IOException e) {
e.printStackTrace();
}
}
public void execute(Tuple tuple, BasicOutputCollector basicOutputCollector) {
String name=tuple.getString(0);
String fName=name+"_ok";
try {
//华为小米
fileWriter.write(fName);
fileWriter.write("\n");
fileWriter.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
}
}
RandomSpount
package com.zhongruan.storm;
import backtype.storm.spout.SpoutOutputCollector;
import backtype.storm.task.TopologyContext;
import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.topology.base.BaseRichSpout;
import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Values;
import java.util.Map;
import java.util.Random;
public class RandomSpount extends BaseRichSpout {
String[] phones={“iphone”,“huawei”,“xiaomi”,“xiaolajiao”,“meizu”};
private SpoutOutputCollector collector;
public void open(Map map, TopologyContext topologyContext, SpoutOutputCollector spoutOutputCollector) {
this.collector=spoutOutputCollector;
}
public void nextTuple() {
Random random=new Random();
int index=random.nextInt(phones.length);
String phonename=phones[index];
collector.emit(new Values(phonename));
}
public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
outputFieldsDeclarer.declare(new Fields("pn"));
}
}
ToMain
package com.zhongruan.storm;
import backtype.storm.Config;
import backtype.storm.StormSubmitter;
import backtype.storm.generated.AlreadyAliveException;
import backtype.storm.generated.InvalidTopologyException;
import backtype.storm.generated.StormTopology;
import backtype.storm.topology.TopologyBuilder;
public class ToMain {
public static void main(String[] args) throws AlreadyAliveException, InvalidTopologyException {
TopologyBuilder builder=new TopologyBuilder();
builder.setSpout("randomSpount",new RandomSpount());
builder.setBolt("upperBolt",new UpperBolt(),4).shuffleGrouping("randomSpount");
builder.setBolt("okbolt",new OkBolt(),4).shuffleGrouping("upperBolt");
StormTopology topology = builder.createTopology();
Config conf=new Config();
conf.setNumAckers(4);
StormSubmitter.submitTopology("ramtopology",conf,topology);
}
}
UpperBolt
package com.zhongruan.storm;
import backtype.storm.topology.BasicOutputCollector;
import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.topology.base.BaseBasicBolt;
import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Tuple;
import backtype.storm.tuple.Values;
public class UpperBolt extends BaseBasicBolt {
public void execute(Tuple tuple, BasicOutputCollector basicOutputCollector) {
String phonename=tuple.getString(0);
String upName=phonename.toUpperCase();
basicOutputCollector.emit(new Values(upName));
}
public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
outputFieldsDeclarer.declare(new Fields("uppername"));
}
}
/home/hadoop/app/apache-storm-0.9.2-incubating
上传jar storm1.jar
bin/storm jar /home/hadoop/storm1.jar com.zhongruan.storm.ToMain
关掉
./storm list
./storm kill ramtopology