storm 通用模板
来源:互联网 发布:c语言中怎样定义函数 编辑:程序博客网 时间:2024/06/05 11:27
该程序实现了2个spout和3个bolt互联。
git地址:https://github.com/wylqq312715289/storm-Hw/blob/master/src/main/java/test/stormTest/SecondTopo.java
package test.stormTest;import backtype.storm.topology.TopologyBuilder;import backtype.storm.topology.BasicOutputCollector;import backtype.storm.topology.OutputFieldsDeclarer;import backtype.storm.topology.base.BaseBasicBolt;import backtype.storm.topology.base.BaseRichSpout;import backtype.storm.topology.base.BaseRichBolt; import backtype.storm.Config;import backtype.storm.LocalCluster;import backtype.storm.StormSubmitter;import backtype.storm.utils.Utils;import backtype.storm.spout.SpoutOutputCollector;import backtype.storm.task.TopologyContext;import backtype.storm.tuple.Fields;import backtype.storm.tuple.Tuple;import backtype.storm.tuple.Values;import backtype.storm.task.OutputCollector;import java.util.Map;import java.util.Random;public class SecondTopo { public static void main(String[] args) throws Exception { // 解决ZOOKEEPER客户端连接服务端问题(IPV6) System.setProperty("java.net.preferIPv4Stack", "true"); // 创建拓扑结构 TopologyBuilder builder = new TopologyBuilder(); builder.setSpout("spout1",new Spout1(), 2).setNumTasks(4); // 4(并发度-task) 2个executor(线程) builder.setSpout("spout2",new Spout2(), 2).setNumTasks(4); builder.setBolt("bolt1", new Bolt1(), 3).shuffleGrouping("spout1","stream2").shuffleGrouping("spout2"); builder.setBolt("bolt2", new Bolt2(), 3).shuffleGrouping("spout1","stream1").shuffleGrouping("bolt1","stream1"); builder.setBolt("bolt3", new Bolt3(), 3).shuffleGrouping("bolt1","stream2"); /**************************************************************************** */ Config conf = new Config(); conf.setDebug(false); if (args != null && args.length > 0) { // 集群模式 conf.setNumWorkers(3); StormSubmitter.submitTopology(args[0], conf, builder.createTopology()); } else { // 本地模式 System.out.println("本地模式开始"); LocalCluster cluster = new LocalCluster(); // 定义topology的名称为"firstTopo" cluster.submitTopology("testTopology", conf, builder.createTopology()); Utils.sleep(5000); // 本地模式 5s 后杀死该Topology cluster.killTopology("testTopology"); cluster.shutdown(); } } }/********************************* Spout1 ******************************************/class Spout1 extends BaseRichSpout{ private static final long serialVersionUID = -1215556162813479167L; private SpoutOutputCollector collector; public void open(Map conf, TopologyContext context,SpoutOutputCollector collector) { this.collector = collector; // Storm自动初始化 } public void nextTuple() { String[] words = {"spout1_word1", "spout1_word2", "spout1_word3"}; for(String word : words){ String value1 = "spout1"; String value2 = word; collector.emit("stream1",new Values(value1,value2)); // 发送数据需要封装在Values collector.emit("stream2",new Values(value1,value2)); // tuple = (value1,value2) tuple的长度任意 } Utils.sleep(500); //每隔0.1s想外发送tuple System.out.println("In function nextTuple from spout1"); } public void declareOutputFields(OutputFieldsDeclarer declarer) { declarer.declareStream("stream1", new Fields("spout1_value1","spout1_value2")); // tuple = (...,value_name_i,...) value1是名称 declarer.declareStream("stream2", new Fields("spout1_value1","spout1_value2")); // tuple = (...,value_name_i,...) value1是名称 } // Spout发送到 toplogy 成功完成时调用ack public void ack(Object msgId) { System.out.println("Spout1: ack " + msgId); } // Spout发送到toplogy失败时调用fail public void fail(Object msgId) { System.out.println("Spout1: fail" + msgId); } }/********************************* Spout2 ******************************************/class Spout2 extends BaseRichSpout{ private static final long serialVersionUID = -1215556162813479167L; private SpoutOutputCollector collector; public void open(Map conf, TopologyContext context,SpoutOutputCollector collector) { this.collector = collector; // Storm自动初始化 } public void nextTuple() { String[] words = {"spout2_word1", "spout2_word2", "spout2_word3"}; for(String word : words){ String value1 = "spout2"; String value2 = word; collector.emit(new Values(value1,value2)); // 发送数据需要封装在Values } Utils.sleep(500); //每隔0.1s想外发送tuple System.out.println("In function nextTuple from spout2"); } public void declareOutputFields(OutputFieldsDeclarer declarer) { declarer.declare(new Fields("spout2_value1","spout2_value2")); // tuple = (...,value_name_i,...) value1是名称 } // Spout发送到 toplogy 成功完成时调用ack public void ack(Object msgId) { System.out.println("Spout2: ack " + msgId); } // Spout发送到toplogy失败时调用fail public void fail(Object msgId) { System.out.println("Spout2: fail" + msgId); } }/********************************* Bolt1 ******************************************/class Bolt1 extends BaseRichBolt{ private static final long serialVersionUID = 7593355203928566992L; private OutputCollector collector; @Override public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) { this.collector = collector; } @Override public void execute(Tuple input) { if(input.getSourceComponent().equals("spout1")){ String from = (String)input.getValueByField("spout1_value1");// 获取 tuple=(...,value_name_i,...) 中的指定元素 String word = (String)input.getValueByField("spout1_value2"); from = from + "->bolt1"; if(word != null){ collector.emit("stream1",new Values(from,word)); collector.emit("stream2",new Values(from,word)); System.out.println("(bolt1 excute)from="+from+";sent value="+word); } collector.ack(input); } else{ String from = (String)input.getValueByField("spout2_value1");// 获取 tuple=(...,value_name_i,...) 中的指定元素 String word = (String)input.getValueByField("spout2_value2"); from = from + "->bolt1"; if(word != null){ collector.emit("stream1",new Values(from,word)); collector.emit("stream2",new Values(from,word)); System.out.println("(bolt1 excute)from="+from+";sent value="+word); } collector.ack(input); } } @Override public void declareOutputFields(OutputFieldsDeclarer declarer) { declarer.declareStream("stream1",new Fields("bolt1_value1","bolt1_value2")); declarer.declareStream("stream2",new Fields("bolt1_value1","bolt1_value2")); } }/********************************* Bolt2 ******************************************/class Bolt2 extends BaseRichBolt{ private static final long serialVersionUID = 4342676753918989102L; private OutputCollector collector; @Override public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) { this.collector = collector; } @Override public void execute(Tuple input) { if(input.getSourceComponent().equals("spout1")){ String from = (String)input.getValueByField("spout1_value1");// 获取 tuple=(...,value_name_i,...) 中的指定元素 String word = (String)input.getValueByField("spout1_value2"); from = from + "->bolt2"; if(word != null){ System.out.println("(bolt2 excute)from="+from+";value="+word+",no sent."); } collector.ack(input); }else{ String from = (String)input.getValueByField("bolt1_value1");// 获取 tuple=(...,value_name_i,...) 中的指定元素 String word = (String)input.getValueByField("bolt1_value2"); from = from + "->bolt2"; if(word != null){ System.out.println("(bolt2 excute)from="+from+";value="+word+",no sent."); } collector.ack(input); } } @Override public void cleanup() { super.cleanup(); } @Override public void declareOutputFields(OutputFieldsDeclarer declarer) { // 不再传递下一个Bolt组件处理 } } /********************************* Bolt3 ******************************************/class Bolt3 extends BaseRichBolt{ private static final long serialVersionUID = 4342676753918989102L; private OutputCollector collector; @Override public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) { this.collector = collector; } @Override public void execute(Tuple input) { String from = (String)input.getValueByField("bolt1_value1");// 获取 tuple=(...,value_name_i,...) 中的指定元素 String word = (String)input.getValueByField("bolt1_value2"); from = from + "->bolt3"; if(word != null){ System.out.println("(bolt3 excute)from="+from+";value="+word+",no sent."); } collector.ack(input); } @Override public void cleanup() { super.cleanup(); } @Override public void declareOutputFields(OutputFieldsDeclarer declarer) { // 不再传递下一个Bolt组件处理 } }
阅读全文
0 0
- storm 通用模板
- 通用模板
- 通用模板
- 通用模板
- ant脚本通用模板
- ASP通用模板类
- makefile通用模板
- makefile通用模板
- WinMain通用模板
- Makefile通用模板
- 通用MAKEfile模板
- Makefile 通用模板
- 一个通用Makefile模板
- excel通用模板组件
- 通用Makefile模板
- SSH配置通用模板
- hibernate通用模板
- 通用的makefile模板
- Meshlab读取三维点云、三维点云重建以及三维点云法向量计算
- Java回调机制
- Capturing 'self' strongly in this block is likely to lead to a retain cycle [duplicate]
- 函数返回值
- 未清采购订单关闭最全的方法
- storm 通用模板
- LBaas之(四)Neutron/LBaaS/API
- 使用ESP8266WIFI模块心得
- 深度前馈网络【DeepLearningBook读书笔记】
- 【spring】事务
- 28.输入两个链表,找出它们的第一个公共结点。
- java实现全排列
- 降噪 (Noise Reduction)对于图像边缘检测 (Edge Detection)的意义
- 手动实现arcgis的PrintTask