storm自带例子详解 (一)——WordCountTopologyNode
来源:互联网 发布:软件著作权代理 编辑:程序博客网 时间:2024/06/06 13:21
/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package storm.starter;import backtype.storm.Config;import backtype.storm.LocalCluster;import backtype.storm.StormSubmitter;import backtype.storm.spout.ShellSpout;import backtype.storm.task.ShellBolt;import backtype.storm.topology.*;import backtype.storm.topology.base.BaseBasicBolt;import backtype.storm.tuple.Fields;import backtype.storm.tuple.Tuple;import backtype.storm.tuple.Values;import java.util.HashMap;import java.util.Map;/** * This topology demonstrates Storm's stream groupings and multilang capabilities. */ /*** 一个使用了多语言机制的storm——WordCount*/public class WordCountTopologyNode {// 定义一个Bolt,继承自ShellBolt,用ShellBolt来实现多语言机制(使用js实现了Bolt)public static class SplitSentence extends ShellBolt implements IRichBolt {// 构造函数public SplitSentence() {// 调用父类的构造函数——父类的构造函数将splitsentence.js作为Boltsuper("node", "splitsentence.js");}@Overridepublic void declareOutputFields(OutputFieldsDeclarer declarer) {// 定义个字段worddeclarer.declare(new Fields("word"));}@Overridepublic Map<String, Object> getComponentConfiguration() {return null;}}// 定义另外一个喷口——也是使用了多语言机制(使用js实现了Spout) public static class RandomSentence extends ShellSpout implements IRichSpout { public RandomSentence() {// 同样的使用randomsentence.js作为实际的Spout super("node", "randomsentence.js"); } @Override public void declareOutputFields(OutputFieldsDeclarer declarer) {// 定义一个字段word declarer.declare(new Fields("word")); } @Override public Map<String, Object> getComponentConfiguration() { return null; } }// 定义一个Boltpublic static class WordCount extends BaseBasicBolt {Map<String, Integer> counts = new HashMap<String, Integer>();@Overridepublic void execute(Tuple tuple, BasicOutputCollector collector) {// 接收一个单词String word = tuple.getString(0);// 取得单词对应的计数Integer count = counts.get(word);if (count == null)count = 0;// 计数增加count++;// 保存单词和对应的计数counts.put(word, count);// 发射单词和对应的计数(字段分别是word和count)collector.emit(new Values(word, count));}@Overridepublic void declareOutputFields(OutputFieldsDeclarer declarer) {// 定义两个字段word和countdeclarer.declare(new Fields("word", "count"));} } public static void main(String[] args) throws Exception {// 创建一个拓扑 TopologyBuilder builder = new TopologyBuilder();// 设置Spout builder.setSpout("spout", new RandomSentence(), 5);// 设置Bolt——split builder.setBolt("split", new SplitSentence(), 8).shuffleGrouping("spout");// 设置Bolt——count builder.setBolt("count", new WordCount(), 12).fieldsGrouping("split", new Fields("word"));// 设置为调试状态 Config conf = new Config(); conf.setDebug(true); if (args != null && args.length > 0) { conf.setNumWorkers(3); // 提交拓扑(集群) StormSubmitter.submitTopologyWithProgressBar(args[0], conf, builder.createTopology()); } else { // 提交拓扑(本地) conf.setMaxTaskParallelism(3); LocalCluster cluster = new LocalCluster(); cluster.submitTopology("word-count", conf, builder.createTopology()); Thread.sleep(10000); cluster.shutdown(); } }}
0 0
- storm自带例子详解 (一)——WordCountTopologyNode
- storm自带例子详解 (二)——BasicDRPCTopology
- storm自带例子详解 (三)——ExclamationTopology
- storm自带例子详解 (四)——ManualDRPC
- storm自带例子详解 (五)——PrintSampleStream
- storm自带例子详解 (六)——ReachTopology
- Struts自带例子介绍(一)
- matlab自带SVM算法例子(附函数详解)
- struts2自带例子mailreader学习(一)
- ArcGIS.Server.9.2.DotNet自带例子分析(一、一)
- Java注解(Annotation)详解(一)——概述及JDK自带注解
- Java注解(Annotation)详解(一)——概述及JDK自带注解
- Java注解(Annotation)详解(一)——概述及JDK自带注解
- Storm详解一、Storm 概述
- Struts自带例子介绍(二)
- NotesList(Robotium自带的例子)
- ArcGIS.Server.9.2.DotNet自带例子分析(一、二)
- ArcGIS.Server.9.2.DotNet自带例子分析(一、三)
- ubuntu下使用mysql的一些命令
- scala io操作
- ASP.NET服务端控制页面弹窗
- uvalive 6886 Flowery Trails fft
- linux 查看文件
- storm自带例子详解 (一)——WordCountTopologyNode
- LeetCode之ThreeSum
- 风雨java路之【基础篇】——看看Set集合那点儿猫腻
- Android 颜色对照表
- 《Linux命令、编辑器与Shell编程》读书笔记1-linux系统入门命令
- 字符串到字节数组和字节数组到字符串的转换(编码和解码问题)
- oracle 自定义类型
- 特征提取-特征后期融合-多核学习方法(MKL)
- java 设计模式-----适配器模式