zoukankan      html  css  js  c++  java
  • 新建一个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
  • 相关阅读:
    编程珠玑:单词频率最高选取
    编程之美:求二进制中1的个数
    编程珠玑:用后缀数组寻找最长重复字符串
    编程珠玑:变位词程序的实现
    编程珠玑:位图法排序
    Hadoop 2.0 代码:Client端代码简要分析
    编程之美:求数组的子数组之和的最大值
    经典正则表达式
    C#下实现动态系统托盘图标
    HTTPBrowserCapabilities在asp.net中显示浏览器属性
  • 原文地址:https://www.cnblogs.com/zhengchunhao/p/5585335.html
Copyright © 2011-2022 走看看