strom wordcount java 实现案例
来源:互联网 发布:上海千行物流网络 编辑:程序博客网 时间:2024/05/19 00:13
1,spout编写,读取文件内容:
package com.storm.test;import java.io.BufferedReader;import java.io.FileReader;import java.util.Map;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;public class WordReader extends BaseRichSpout{private SpoutOutputCollector collector;private FileReader fileReader;private String filePath;private boolean completed = false;@Overridepublic void ack(Object msgId) {System.out.println("msgId === "+msgId);}@Overridepublic void close() {}@Overridepublic void fail(Object msgId) {System.out.println("fail === "+msgId);}@Overridepublic void open(Map conf, TopologyContext context,SpoutOutputCollector collector) {try {this.fileReader = new FileReader(conf.get("wordFile").toString());} catch (Exception e) {e.printStackTrace();}this.filePath = conf.get("wordFile").toString();this.collector = collector;}@Overridepublic void nextTuple() {if(completed){try {Thread.sleep(1000);} catch (Exception e) {e.printStackTrace();}return ;}String str;BufferedReader reader = new BufferedReader(fileReader);try {while ((str = reader.readLine()) != null){System.out.println("read line = "+str);this.collector.emit(new Values(str),str);System.out.println("WordReader spout = "+str);}} catch (Exception e) {e.printStackTrace();}finally{completed = true;}}@Overridepublic void declareOutputFields(OutputFieldsDeclarer declarer) {declarer.declare(new Fields("line"));} }
2,Bolt编写实现句子分割:
package com.storm.test;import java.util.Map;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 WordNormalizer extends BaseBasicBolt{@Overridepublic void execute(Tuple input, BasicOutputCollector collector) {String sentence = input.getString(0);String[] words = sentence.split(",");System.out.println("reader line = "+sentence);for(String word : words){if(!word.trim().isEmpty()){collector.emit(new Values(word.trim().toUpperCase()));}}}@Overridepublic void declareOutputFields(OutputFieldsDeclarer declarer) {declarer.declare(new Fields("word"));} }
3,bolt编写是单词统计:
package com.storm.test;import java.util.HashMap;import java.util.Map;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.Fields;import backtype.storm.tuple.Tuple;public class WordCount extends BaseBasicBolt{Integer id;String name;Map<String,Integer> counters ;@Overridepublic void cleanup() {System.out.println("word counter :["+name+"-"+id);for(Map.Entry<String, Integer> entry : counters.entrySet()){System.out.println(entry.getKey()+":"+entry.getValue());}System.out.println("counter finish!");}@Overridepublic void prepare(Map stormConf, TopologyContext context) {this.counters = new HashMap<String,Integer>();this.name = context.getThisComponentId();this.id = context.getThisTaskId();}@Overridepublic void execute(Tuple input, BasicOutputCollector collector) {String str = input.getString(0);System.out.println("wordCounter recever "+str);if(!counters.containsKey(str)){counters.put(str,1);}else{Integer c = counters.get(str) + 1;counters.put(str,c);}}@Overridepublic void declareOutputFields(OutputFieldsDeclarer declarer) {declarer.declare(new Fields("word"));} }
4,main方法编写:
package com.storm.test;import backtype.storm.Config;import backtype.storm.LocalCluster;import backtype.storm.topology.TopologyBuilder;import backtype.storm.tuple.Fields;public class ToplogyTest {public static void main(String[] args) throws Exception {TopologyBuilder builder = new TopologyBuilder();builder.setSpout("<span style="color:#FF0000;">word-reader</span>",new WordReader());builder.setBolt("<span style="color:#33CC00;">word-normalize</span>r",new WordNormalizer()).shuffleGrouping("<span style="color:#FF0000;">word-reader</span>");builder.setBolt("word-count",new WordCount(),1).fieldsGrouping("<span style="color:#009900;"><span style="color:#33FF33;">word-normalize</span>r</span>",new Fields("word"));Config conf = new Config();conf.setDebug(true);conf.setNumWorkers(2);//word.txt:hello,world,hello,storm,hello,spark,hadoop,hadoopconf.put("wordFile", "/home/lixun/word.txt");//conf.setDebug(true);conf.put(Config.TOPOLOGY_MAX_SPOUT_PENDING, 1);LocalCluster cluster = new LocalCluster();cluster.submitTopology("wordCounterTopology",conf,builder.createTopology());Thread.sleep(4000);cluster.killTopology("wordCounterTopology");cluster.shutdown();}}
0 0
- strom wordcount java 实现案例
- Mapreduce Java实现WordCount 小案例
- 用Java实现WordCount
- mapreduce wordcount案例
- MR案例之WordCount
- Hadop案例之WordCount
- Hadoop 运行wordcount案例
- Hadoop的WordCount案例
- 运行WordCount案例
- MapperReduce入门Wordcount案例
- strom
- strom实现数单词功能
- 用Java实现简单的WordCount
- Spark:用Scala和Java实现WordCount
- Spark:用Scala和Java实现WordCount
- java和scala分别实现WordCount
- Spark:用Scala和Java实现WordCount
- Spark:用Scala和Java实现WordCount
- android开发(十九) BroadcastReceiver应用详解
- OpenERP中生产型企业原材料采购及入库的处理
- selenium2webdriver升级jar后无法运行提示NoclassDefFoundError
- python -- 简单感受一下python的魅力
- SetWindowsHookEx 详解(一)
- strom wordcount java 实现案例
- 解决matlab代码中打开摄像头错误
- windows平台编译pcre
- hdu 5053 the Sum of Cube(上海网络赛)
- 大型网站系统架构演化之路
- 色彩、印刷类重要网站
- 三层演义
- SQLite SQL语句之增删改查 详解举例
- Ubuntu下Zynq交叉编译环境的搭建