storm入门demo
一.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的更多相关文章
- 《Storm入门》中文版
本文翻译自<Getting Started With Storm>译者:吴京润 编辑:郭蕾 方腾飞 本书的译文仅限于学习和研究之用,没有原作者和译者的授权不能用于商业用途. 译者序 ...
- 【原】Storm 入门教程目录
Storm入门教程 1. Storm基础 Storm Storm主要特点 Storm基本概念 Storm调度器 Storm配置 Guaranteeing Message Processing(消息处理 ...
- Storm入门之第一章
Storm入门之第一章 1.名词 spout龙卷,读取原始数据为bolt提供数据 bolt雷电,从spout或者其他的bolt接收数据,并处理数据,处理结果可作为其他bolt的数据源或最终结果 nim ...
- 【SSH系列】初识spring+入门demo
学习过了hibernate,也就是冬天,经过一个冬天的冬眠,当春风吹绿大地,万物复苏,我们迎来了spring,在前面的一系列博文中,小编介绍hibernate的相关知识,接下来的博文中,小编将继续介绍 ...
- Storm入门(四)WordCount示例
一.关联代码 使用maven,代码如下. pom.xml 和Storm入门(三)HelloWorld示例相同 RandomSentenceSpout.java /** * Licensed to t ...
- 基于springboot构建dubbo的入门demo
之前记录了构建dubbo入门demo所需的环境以及基于普通maven项目构建dubbo的入门案例,今天记录在这些的基础上基于springboot来构建dubbo的入门demo:众所周知,springb ...
- apollo入门demo实战(二)
1. apollo入门demo实战(二) 1.1. 下载demo 从下列地址下载官方脚本和官方代码 https://github.com/nobodyiam/apollo-build-scripts ...
- lua入门demo(HelloWorld+redis读取)
1. lua入门demo 1.1. 入门之Hello World!! 由于我习惯用docker安装各种软件,这次的lua脚本也是运行在docker容器上 openresty是nginx+lua的各种模 ...
- netty入门demo(一)
目录 前言 正文 代码部分 服务端 客服端 测试结果一: 解决粘包,拆包的问题 总结 前言 最近做一个项目: 大概需求: 多个温度传感器不断向java服务发送温度数据,该传感器采用socket发送数据 ...
随机推荐
- java-mysql(2) Prepared statement
上一篇学习了java如何链接配置mysql,这篇学习下java如何处理sql预处理语句(PreparedStatement),首先是一个sql预处理的例子: package core; import ...
- 基于ASP.NET的新闻管理系统(一)
1. 项目简介 1.1设计内容 (1)可以在首页查看各类新闻,可以点击新闻查看具体内容:可以查看不同类型的新闻,并了解热点新闻,可以在搜索框里输入要查找的内容. (2)在后台界面中,管理员可以修改密码 ...
- java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileItemFactory 解决办法
解决办法:引入file upload 模块. 在POM文件中添加如下内容: <!-- file upload part --> <dependency> <groupId ...
- 如何使用jQuery可以让滚轮滚到底部可以自动加载所需内容
话不多说先上代码 $(window).scroll(function() { var scrollTop = $(this).scrollTop(); //滚动高度 var windowHeig ...
- 「玩转树莓派」树莓派 3B+ 配置无线WiFi
前言 网线不方便还花钱,有自带的无线 WiFi 模块为啥不用. 网络模式 这里我们先介绍两种网络模式,WPA-Personal 与 WPA-Enterprise. WPA-Personal 大多数家庭 ...
- git上如何处理无法clone和merge
对于一些需要FQ才能克隆下来的项目,我们需要使用代理 进入terminal: 设置代理: git config --global http.proxy http://127.0.0.1:1087 gi ...
- Scala 学习之路(十三)—— 隐式转换和隐式参数
一.隐式转换 1.1 使用隐式转换 隐式转换指的是以implicit关键字声明带有单个参数的转换函数,它将值从一种类型转换为另一种类型,以便使用之前类型所没有的功能.示例如下: // 普通人 clas ...
- 【shell学习4》》】系统化整理大纲
之前看的runnoob整理,细节太多也没有系统起来,昨天公交上看了一些视频,略作总结: 标题零:学习基础//创建文件touch testVar.sh //vim编辑内容#!/bin/bashvari= ...
- 了解Kubernetes主体架构(二十八)
前言 Kubernetes的教程一直在编写,目前已经初步完成了以下内容: 1)基础理论 2)使用Minikube部署本地Kubernetes集群 3)使用Kubeadm创建集群 接下来还会逐步完善本教 ...
- 微信小程序ES6方法Promise封装接口
为何要封装接口? 有小程序开发的经验者,相信对微信API Request很熟悉了.对接接口时,有大部分的开发者都是直接调用request方法,去请求后台接口并渲染数据.诚然,直接使用api发起请求对接 ...
