Storm WordCount 代码

来源:互联网 发布:程序员需要什么学历 编辑:程序博客网 时间:2024/06/05 02:46

WordCountTopologMain

package top.itning.storm;import org.apache.storm.Config;import org.apache.storm.LocalCluster;import org.apache.storm.topology.TopologyBuilder;import org.apache.storm.tuple.Fields;/*** * * @author : ning * @version : 1.0.0 * @date :   2017/11/12 **/public class WordCountTopologMain {    public static void main(String[] args) {        TopologyBuilder topologyBuilder = new TopologyBuilder();        topologyBuilder.setSpout("mySpout", new MySpout(), 2);        topologyBuilder.setBolt("mybolt1", new MySplitBolt(), 2).shuffleGrouping("mySpout");        topologyBuilder.setBolt("mybolt2", new MyCountBolt(), 4).fieldsGrouping("mybolt1", new Fields("word"));        Config config = new Config();        config.setNumWorkers(2);        //        StormSubmitter.submitTopology("mywordcount",config,topologyBuilder.createTopology());        LocalCluster localCluster = new LocalCluster();        localCluster.submitTopology("mywordcount", config, topologyBuilder.createTopology());    }}

MySpout

package top.itning.storm;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;/*** * * @author : ning * @version : 1.0.0 * @date :   2017/11/12 **/public class MySpout extends BaseRichSpout {    private SpoutOutputCollector collector;    @Override    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {        this.collector = collector;    }    @Override    public void nextTuple() {        collector.emit(new Values("i am lilei love hanmeimei"));    }    @Override    public void declareOutputFields(OutputFieldsDeclarer declarer) {        declarer.declare(new Fields("love"));    }}

MySplitBolt

package top.itning.storm;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;import java.util.Map;/*** * * @author : ning * @version : 1.0.0 * @date :   2017/11/12 **/public class MySplitBolt extends BaseRichBolt {    private OutputCollector collector;    @Override    public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {        this.collector = collector;    }    @Override    public void execute(Tuple input) {        String line = input.getString(0);        String[] arrWords = line.split(" ");        for (String word : arrWords) {            collector.emit(new Values(word, 1));        }       // collector.ack(input);    }    @Override    public void declareOutputFields(OutputFieldsDeclarer declarer) {        declarer.declare(new Fields("word","num"));    }}

MyCountBolt

package top.itning.storm;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;import java.util.HashMap;import java.util.Map;/*** * * @author : ning * @version : 1.0.0 * @date :   2017/11/12 **/public class MyCountBolt extends BaseRichBolt {    private Map<String, Integer> map = new HashMap<String, Integer>();    @Override    public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {    }    @Override    public void execute(Tuple input) {        String word = input.getString(0);        Integer num = input.getInteger(1);        System.out.println(Thread.currentThread().getId() + "    word:" + word);        if (map.containsKey(word)) {            Integer count = map.get(word);            map.put(word, count + num);        } else {            map.put(word, num);        }        System.out.println("count:" + map);    }    @Override    public void declareOutputFields(OutputFieldsDeclarer declarer) {    }}
原创粉丝点击