一.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. java-mysql(2) Prepared statement

    上一篇学习了java如何链接配置mysql,这篇学习下java如何处理sql预处理语句(PreparedStatement),首先是一个sql预处理的例子: package core; import ...

  2. 基于ASP.NET的新闻管理系统(一)

    1. 项目简介 1.1设计内容 (1)可以在首页查看各类新闻,可以点击新闻查看具体内容:可以查看不同类型的新闻,并了解热点新闻,可以在搜索框里输入要查找的内容. (2)在后台界面中,管理员可以修改密码 ...

  3. java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileItemFactory 解决办法

    解决办法:引入file upload 模块. 在POM文件中添加如下内容: <!-- file upload part --> <dependency> <groupId ...

  4. 如何使用jQuery可以让滚轮滚到底部可以自动加载所需内容

    话不多说先上代码 $(window).scroll(function() {   var scrollTop = $(this).scrollTop(); //滚动高度  var windowHeig ...

  5. 「玩转树莓派」树莓派 3B+ 配置无线WiFi

    前言 网线不方便还花钱,有自带的无线 WiFi 模块为啥不用. 网络模式 这里我们先介绍两种网络模式,WPA-Personal 与 WPA-Enterprise. WPA-Personal 大多数家庭 ...

  6. git上如何处理无法clone和merge

    对于一些需要FQ才能克隆下来的项目,我们需要使用代理 进入terminal: 设置代理: git config --global http.proxy http://127.0.0.1:1087 gi ...

  7. Scala 学习之路(十三)—— 隐式转换和隐式参数

    一.隐式转换 1.1 使用隐式转换 隐式转换指的是以implicit关键字声明带有单个参数的转换函数,它将值从一种类型转换为另一种类型,以便使用之前类型所没有的功能.示例如下: // 普通人 clas ...

  8. 【shell学习4》》】系统化整理大纲

    之前看的runnoob整理,细节太多也没有系统起来,昨天公交上看了一些视频,略作总结: 标题零:学习基础//创建文件touch testVar.sh //vim编辑内容#!/bin/bashvari= ...

  9. 了解Kubernetes主体架构(二十八)

    前言 Kubernetes的教程一直在编写,目前已经初步完成了以下内容: 1)基础理论 2)使用Minikube部署本地Kubernetes集群 3)使用Kubeadm创建集群 接下来还会逐步完善本教 ...

  10. 微信小程序ES6方法Promise封装接口

    为何要封装接口? 有小程序开发的经验者,相信对微信API Request很熟悉了.对接接口时,有大部分的开发者都是直接调用request方法,去请求后台接口并渲染数据.诚然,直接使用api发起请求对接 ...