新建一个storm工程

一、maven创建工程

 

mvn archetype:generate -DgroupId=com.h3c.storm -DartifactId=storm-samples -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

 

二、导入创建好的maven工程到eclipse,修改pom文件,加上以下部分

   <dependency>

      <groupId>org.apache.storm</groupId>

      <artifactId>storm-core</artifactId>

      <version>0.10.0</version>

      <!-- keep storm out of the jar-with-dependencies -->

      <scope>provided</scope>

    </dependency>

最终的pom如下:

 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 3   <modelVersion>4.0.0</modelVersion>
 4   <groupId>com.h3c.storm</groupId>
 5   <artifactId>storm-samples</artifactId>
 6   <packaging>jar</packaging>
 7   <version>1.0-SNAPSHOT</version>
 8   <name>storm-samples</name>
 9   <url>http://maven.apache.org</url>
10   <dependencies>
11     <dependency>
12       <groupId>junit</groupId>
13       <artifactId>junit</artifactId>
14       <version>3.8.1</version>
15       <scope>test</scope>
16     </dependency>
17     
18     <dependency>
19       <groupId>org.apache.storm</groupId>
20       <artifactId>storm-core</artifactId>
21       <version>0.10.0</version>
22       <!-- keep storm out of the jar-with-dependencies -->
23       <scope>provided</scope>
24     </dependency>
25   </dependencies>
26 </project>
pom

三、修改app.java 名字(当然不修改也可以)为MyFirstTopology,并写一个示例代码

  1 package com.h3c.storm;
  2 
  3 import java.util.Map;
  4 import java.util.Random;
  5 
  6 import backtype.storm.Config;
  7 import backtype.storm.LocalCluster;
  8 import backtype.storm.StormSubmitter;
  9 import backtype.storm.spout.SpoutOutputCollector;
 10 import backtype.storm.task.TopologyContext;
 11 import backtype.storm.topology.BasicOutputCollector;
 12 import backtype.storm.topology.OutputFieldsDeclarer;
 13 import backtype.storm.topology.TopologyBuilder;
 14 import backtype.storm.topology.base.*;
 15 import backtype.storm.tuple.Fields;
 16 import backtype.storm.tuple.Tuple;
 17 import backtype.storm.tuple.Values;
 18 import backtype.storm.utils.Utils;
 19 
 20 public class MyFirstTopology {
 21 
 22     public static class RandomSpout extends BaseRichSpout {
 23 
 24         private SpoutOutputCollector collector;
 25 
 26         private Random rand;
 27         
 28         private static String[] sentences = new String[] {"kane1:I'm kane1", "kane2:I'm kane2", 
 29                                                           "kane3:I'm kane3", "kane4:I'm kane4"};
 30         
 31         @Override
 32         public void open(Map conf, TopologyContext context,
 33                 SpoutOutputCollector collector) {
 34             this.collector = collector;
 35             this.rand = new Random();
 36         }
 37 
 38         @Override
 39         public void nextTuple() {
 40             String toSay = sentences[rand.nextInt(sentences.length)];
 41             this.collector.emit(new Values(toSay));
 42         }
 43 
 44         @Override
 45         public void declareOutputFields(OutputFieldsDeclarer declarer) {
 46             declarer.declare(new Fields("sentence"));
 47         }
 48 
 49     }
 50     
 51     public static class ExclaimBasicBolt extends BaseBasicBolt {
 52 
 53         @Override
 54         public void execute(Tuple tuple, BasicOutputCollector collector) {
 55             //String sentence = tuple.getString(0);
 56             String sentence = (String) tuple.getValue(0);
 57             String out = sentence + "!";
 58             collector.emit(new Values(out));
 59         }
 60 
 61         @Override
 62         public void declareOutputFields(OutputFieldsDeclarer declarer) {
 63             declarer.declare(new Fields("excl_sentence"));
 64         }
 65 
 66     }
 67 
 68     public static class PrintBolt extends BaseBasicBolt {
 69 
 70         @Override
 71         public void execute(Tuple tuple, BasicOutputCollector collector) {
 72             String rec = tuple.getString(0);
 73             System.err.println("String recieved: " + rec);
 74         }
 75 
 76         @Override
 77         public void declareOutputFields(OutputFieldsDeclarer declarer) {
 78             // do nothing
 79         }
 80 
 81     }
 82     public static void main(String[] args) throws Exception {
 83         TopologyBuilder builder = new TopologyBuilder();
 84         
 85         builder.setSpout("spout", new RandomSpout());
 86         builder.setBolt("exclaim", new ExclaimBasicBolt()).shuffleGrouping("spout");
 87         builder.setBolt("print", new PrintBolt()).shuffleGrouping("exclaim");
 88 
 89         Config conf = new Config();
 90         conf.setDebug(false);
 91 
 92         if (args != null && args.length > 0) {
 93             conf.setNumWorkers(3);
 94 
 95             StormSubmitter.submitTopology(args[0], conf, builder.createTopology());
 96         } else {
 97 
 98             LocalCluster cluster = new LocalCluster();
 99             cluster.submitTopology("test", conf, builder.createTopology());
100             Utils.sleep(10000);
101             cluster.killTopology("test");
102             cluster.shutdown();
103         }
104     }
105 }
MyFirstTopology

 

posted @ 2016-06-14 20:17  kane_zch  阅读(325)  评论(0编辑  收藏  举报