一.storm入门demo的介绍

storm的入门helloworld有2种方式,一种是本地的,另一种是远程。

  本地实现:

    本地写好demo之后,不用搭建storm集群,下载storm的相关jar包即可实现storm的相关操作

  远程实现:

    本地写好demo之后,需要将其打成jar包,然后通过nimbus将jar包运行即可

    本地打包注意事项:

      由于打好的jar包会将其放到storm的集群上,因此storm上已经包含了运行的相关环境,但是在通过maven打包时需要storm-core设置成provided范围,不需要将storm-core的相关类打进jar包,以避免引起冲突

二.本地demo的实现

  下载storm 所需jar包storm-core

1.spout数据源的实现

public class RandomStringSpout extends BaseRichSpout{

    private final static Map<Integer,String> map = new HashMap<Integer, String>();

    private SpoutOutputCollector collector;

    public RandomStringSpout(){
map.put(0, "kafka");
map.put(1, "nifi");
map.put(2, "flink");
map.put(3, "storm");
map.put(4, "spark");
} //在Spout组件初始化时被调用
public void open(Map arg0, TopologyContext topologyContextrg1, SpoutOutputCollector spoutOutputCollector) {
System.err.println(" ============== open");
this.collector = spoutOutputCollector;
} //nextTuple()方法是Spout实现的核心。
//也就是主要执行方法,用于输出信息,通过collector.emit方法发射
public void nextTuple() {
//发送数据
collector.emit(new Values(map.get(ThreadLocalRandom.current().nextInt(4))));
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
} //用于声明数据格式,即输出的一个Tuple中,包含几个字段
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields("stream"));
} }

2.Bolt数据过滤

public class WrapStarBolt extends BaseBasicBolt{

    public void execute(Tuple tuple, BasicOutputCollector Collector) {
String value = tuple.getStringByField("stream");
System.err.println("******"+value);
} public void declareOutputFields(OutputFieldsDeclarer declarer) {
//nothing to do
}
}
public class WrapWellBolt extends BaseBasicBolt{

    public void execute(Tuple tuple, BasicOutputCollector collector) {
String value = tuple.getStringByField("stream");
System.err.println("#######"+value);
} public void declareOutputFields(OutputFieldsDeclarer arg0) {
//nothing to do
}
}

3.创建topology

//所有的spout bolt 会组成一个topology
public class RadomStringTopologyLocal {
public static void main(String[] args) throws InterruptedException { TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("RandomStringSpout", new RandomStringSpout()); builder.setBolt("wrapStarBolt", new WrapStarBolt()).shuffleGrouping("RandomStringSpout");
builder.setBolt("wrapWellBolt", new WrapWellBolt()).shuffleGrouping("RandomStringSpout"); Config config = new Config();
config.setDebug(true); LocalCluster cluster = new LocalCluster();
cluster.submitTopology("RadomStringTopologyLocal", config, builder.createTopology()); System.err.println("the first topology is start running at local"); TimeUnit.SECONDS.sleep(30);
cluster.killTopology("RadomStringTopologyLocal");
cluster.shutdown();
}
}
//从运行的结果中可以看出写的demo已经运行

三.远程demo的实现

  1.使用上一个demo中的RandomStringSpout  WrapStarBolt  WrapWellBolt  这三个类,然后编写新的RandomStringTopologyRemote类

public class RandomStringTopologyRemote {

    public static void main(String[] args) {
final TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("RandomStringSpout", new RandomStringSpout());
builder.setBolt("WrapStarBolt", new WrapStarBolt(),4).shuffleGrouping("RandomStringSpout");
builder.setBolt("WrapWellBolt", new WrapWellBolt(),4).shuffleGrouping("RandomStringSpout"); final Config config = new Config();
config.setNumWorkers(3);
try {
StormSubmitter.submitTopology("RandomStringTopologyRemote", config, builder.createTopology());
} catch (Exception e) {
e.printStackTrace();
}
}
}

2.把上面4个类通过maven工具打成jar包,并上传至nimbus所在的服务器上,上传完毕后通过以下命令远程启动storm

  storm jar storm_test-0.0.1-SNAPSHOT.jar com.zpb.RandomStringTopologyRemote

  远程启动storm的命令是:

    storm jar + *.jar  main函数的全路径名

3.通过UI工具查看

  

4.关闭提交的topology

  storm kill 提交的topology名  

      

storm入门demo的更多相关文章

  1. 《Storm入门》中文版

    本文翻译自<Getting Started With Storm>译者:吴京润    编辑:郭蕾 方腾飞 本书的译文仅限于学习和研究之用,没有原作者和译者的授权不能用于商业用途. 译者序 ...

  2. 【原】Storm 入门教程目录

    Storm入门教程 1. Storm基础 Storm Storm主要特点 Storm基本概念 Storm调度器 Storm配置 Guaranteeing Message Processing(消息处理 ...

  3. Storm入门之第一章

    Storm入门之第一章 1.名词 spout龙卷,读取原始数据为bolt提供数据 bolt雷电,从spout或者其他的bolt接收数据,并处理数据,处理结果可作为其他bolt的数据源或最终结果 nim ...

  4. 【SSH系列】初识spring+入门demo

    学习过了hibernate,也就是冬天,经过一个冬天的冬眠,当春风吹绿大地,万物复苏,我们迎来了spring,在前面的一系列博文中,小编介绍hibernate的相关知识,接下来的博文中,小编将继续介绍 ...

  5. Storm入门(四)WordCount示例

    一.关联代码 使用maven,代码如下. pom.xml  和Storm入门(三)HelloWorld示例相同 RandomSentenceSpout.java /** * Licensed to t ...

  6. 基于springboot构建dubbo的入门demo

    之前记录了构建dubbo入门demo所需的环境以及基于普通maven项目构建dubbo的入门案例,今天记录在这些的基础上基于springboot来构建dubbo的入门demo:众所周知,springb ...

  7. apollo入门demo实战(二)

    1. apollo入门demo实战(二) 1.1. 下载demo 从下列地址下载官方脚本和官方代码 https://github.com/nobodyiam/apollo-build-scripts ...

  8. lua入门demo(HelloWorld+redis读取)

    1. lua入门demo 1.1. 入门之Hello World!! 由于我习惯用docker安装各种软件,这次的lua脚本也是运行在docker容器上 openresty是nginx+lua的各种模 ...

  9. netty入门demo(一)

    目录 前言 正文 代码部分 服务端 客服端 测试结果一: 解决粘包,拆包的问题 总结 前言 最近做一个项目: 大概需求: 多个温度传感器不断向java服务发送温度数据,该传感器采用socket发送数据 ...

随机推荐

  1. Codility--- TapeEquilibrium

    Task description A non-empty zero-indexed array A consisting of N integers is given. Array A represe ...

  2. Google三驾马车:GFS、MapReduce和Bigtable

    谈到分布式系统,就不得不提Google的三驾马车:Google fs[1],Mapreduce[2],Bigtable[3]. 虽然Google没有公布这三个产品的源码,但是他发布了这三个产品的详细设 ...

  3. Tido 习题-二叉树-最高分

    题目描述 老师想知道从某某同学到某某同学当中,分数最高的是多少.现在请你编程模拟老师的询问.当然,老师有时候需要更新某位同学的成绩. 输入 输入包含多组测试数据.每组输入第一行是两个正整数N和M(0& ...

  4. java.nio.Buffer源码阅读

    Java 自从 JDK1.4 起,对各种 I/O 操作使用了 Buffer 和 Channel 技术.这种更接近于操作系统的的底层操作使得 I/O 操作速度得到大幅度提升,下面引用一段<Java ...

  5. golang开发:类库篇(一) Zap高性能日志类库的使用

    为什么要用zap来写日志 原来是写PHP的,一直用的error_log,第一次写Go项目的时候,还真不知道该怎么写日志,后来就按照PHP的写法自己不成规范的捣鼓写.去了新公司之后,发现用的是zap.后 ...

  6. C# 设计模式,简单工厂

    C# 实现计算机功能 (封装,继承,多态) using System; using System.Collections.Generic; using System.Linq; using Syste ...

  7. code forces 1173 B. Nauuo and Chess

    本文链接:https://www.cnblogs.com/blowhail/p/10991237.html B. Nauuo and Chess  原题链接:http://codeforces.com ...

  8. ceph-fuse客户端问题排查流程

    本文讲述了ceph-fuse客户端问题排查基本流程:) 首先查看集群的整体情况 ceph -s 是否有osd挂掉,是否有pg非active ceph-fuse进程是否存在? ps -ef |grep ...

  9. Spring Framework 条件装配 之 @Conditional

    Spring Framework 条件装配 之 @Conditional 前言 了解SpringBoot的小伙伴对Conditional注解一定不会陌生,在SpringBoot项目中,Conditio ...

  10. 带你全面了解高级 Java 面试中需要掌握的 JVM 知识点

    目录 JVM 内存划分与内存溢出异常 垃圾回收算法与收集器 虚拟机中的类加载机制 Java 内存模型与线程 虚拟机性能监控与故障处理工具 参考 带你全面了解高级 Java 面试中需要掌握的 JVM 知 ...