源码下载地址:
storm1.1.1 hellow word例子:
http://download.csdn.net/download/adam_zs/10257386
storm1.2.1 hellow word例子:
https://download.csdn.net/download/adam_zs/10293677
package com.ceair;
import org.apache.storm.Config;
import org.apache.storm.LocalCluster;
import org.apache.storm.topology.TopologyBuilder;
import org.apache.storm.tuple.Fields;
import org.apache.storm.utils.Utils;
public class WordCountTopology {
private static final String SENTENCE_SPOUT_ID = "sentence-spout";
private static final String SPLIT_BOLT_ID = "split-bolt";
private static final String COUNT_BOLT_ID = "count-bolt";
private static final String REPORT_BOLT_ID = "report-bolt";
private static final String TOPOLOGY_NAME = "word-count-topology";
public static void main(String[] args) {
SentenceSpout sentenceSpout = new SentenceSpout();
SplitSentenceBolt splitSentenceBolt = new SplitSentenceBolt();
WordCountBolt wordCountBolt = new WordCountBolt();
ReportBolt reportBolt = new ReportBolt();
TopologyBuilder topologyBuilder = new TopologyBuilder();
topologyBuilder.setSpout(SENTENCE_SPOUT_ID, sentenceSpout);
topologyBuilder.setBolt(SPLIT_BOLT_ID, splitSentenceBolt).shuffleGrouping(SENTENCE_SPOUT_ID);
topologyBuilder.setBolt(COUNT_BOLT_ID, wordCountBolt).fieldsGrouping(SPLIT_BOLT_ID, new Fields("word"));
topologyBuilder.setBolt(REPORT_BOLT_ID, reportBolt).globalGrouping(COUNT_BOLT_ID);
Config config = new Config();
LocalCluster cluster = new LocalCluster();
// 本地提交
cluster.submitTopology(TOPOLOGY_NAME, config, topologyBuilder.createTopology());
Utils.sleep(5000);
cluster.killTopology(TOPOLOGY_NAME);
cluster.shutdown();
}
}
package com.ceair;
import java.util.Map;
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 org.apache.storm.utils.Utils;
public class SentenceSpout extends BaseRichSpout {
private SpoutOutputCollector spoutoutputcollector;
private String[] sentences = { "my name is wangzs", "my name is wangzs" };
@Override
public void nextTuple() {
for (String str : sentences) {
this.spoutoutputcollector.emit(new Values(str));
}
Utils.sleep(1000);
}
@Override
public void open(Map map, TopologyContext topologycontext, SpoutOutputCollector spoutoutputcollector) {
this.spoutoutputcollector = spoutoutputcollector;
}
@Override
public void declareOutputFields(OutputFieldsDeclarer outputfieldsdeclarer) {
outputfieldsdeclarer.declare(new Fields("sentence"));
}
}
package com.ceair;
import java.util.Map;
import org.apache.storm.task.OutputCollector;
import org.apache.storm.task.TopologyContext;
import org.apache.storm.topology.OutputFieldsDeclarer;
import org.apache.storm.topology.base.BaseRichBolt;
import org.apache.storm.tuple.Fields;
import org.apache.storm.tuple.Tuple;
import org.apache.storm.tuple.Values;
public class SplitSentenceBolt extends BaseRichBolt {
private OutputCollector outputcollector;
@Override
public void execute(Tuple tuple) {
String sentence = tuple.getStringByField("sentence");
String[] words = sentence.split(" ");
for (String word : words) {
this.outputcollector.emit(new Values(word));
}
}
@Override
public void prepare(Map map, TopologyContext topologycontext, OutputCollector outputcollector) {
this.outputcollector = outputcollector;
}
@Override
public void declareOutputFields(OutputFieldsDeclarer outputfieldsdeclarer) {
outputfieldsdeclarer.declare(new Fields("word"));
}
}
package com.ceair;
import java.util.HashMap;
import java.util.Map;
import org.apache.storm.task.OutputCollector;
import org.apache.storm.task.TopologyContext;
import org.apache.storm.topology.OutputFieldsDeclarer;
import org.apache.storm.topology.base.BaseRichBolt;
import org.apache.storm.tuple.Fields;
import org.apache.storm.tuple.Tuple;
import org.apache.storm.tuple.Values;
public class WordCountBolt extends BaseRichBolt {
private OutputCollector outputcollector;
private HashMap<String, Integer> counts = null;
@Override
public void prepare(Map map, TopologyContext topologycontext, OutputCollector outputcollector) {
this.outputcollector = outputcollector;
this.counts = new HashMap<String, Integer>();
}
@Override
public void execute(Tuple tuple) {
String word = tuple.getStringByField("word");
Integer count = this.counts.get(word);
if (count == null) {
count = 0;
}
count++;
this.counts.put(word, count);
this.outputcollector.emit(new Values(word, count));
package com.ceair;
import java.util.HashMap;
import java.util.Map;
import org.apache.storm.task.OutputCollector;
import org.apache.storm.task.TopologyContext;
import org.apache.storm.topology.OutputFieldsDeclarer;
import org.apache.storm.topology.base.BaseRichBolt;
import org.apache.storm.tuple.Tuple;
public class ReportBolt extends BaseRichBolt {
private HashMap<String, Integer> counts = null;
@Override
public void prepare(Map map, TopologyContext topologycontext, OutputCollector outputcollector) {
this.counts = new HashMap<String, Integer>();
}
@Override
public void execute(Tuple tuple) {
String word = tuple.getStringByField("word");
int count = tuple.getIntegerByField("count");
counts.put(word, count);
System.out.println("结果:" + this.counts);
}
@Override
public void declareOutputFields(OutputFieldsDeclarer outputfieldsdeclarer) {
}
@Override
public void cleanup() {
System.out.println("---------- FINAL COUNTS -----------");
for (String key : counts.keySet()) {
System.out.println(key + " " + counts.get(key));
}
System.out.println("----------------------------");
}
}
}@Overridepublic void declareOutputFields(OutputFieldsDeclarer outputfieldsdeclarer) {outputfieldsdeclarer.declare(new Fields("word", "count"));}}
运行结果: