storm-wordcount例子

源码下载地址:

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"));}}

运行结果:



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值