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发送数据 ...
随机推荐
- Tensorflow 又要升级了。Nvidia驱动升级,牵一发而动全身
如题. 以前好好的,在宿主主机上,升级了下Linux的内核到4.15.0-13 Ubuntu16.04 以前的nvidia 驱动竟然也调了.用tensorflow 的GPU加速,必须使用nvidia ...
- java.lang.ClassNotFoundException: org.jaxen.JaxenException 解决方法
当遇到如下exception时, May 11, 2017 4:23:17 PM org.apache.catalina.core.StandardWrapperValve invoke SEVERE ...
- SYN5605型 多通道时间间隔测量仪
SYN5605型 多通道时间间隔测量仪 时间间隔测量设备多通道时间间隔测量32路时间间隔测量仪使用说明视频链接; http://www.syn029.com/h-pd-80-0_310_6_-1. ...
- spring之@value详解二(转载)
1.1 前提 测试属性文件:advance_value_inject.properties server.name=server1,server2,server3 #spelDefault.value ...
- express 中间件的理解
nodejs(这指express) 中间件 铺垫: 一个请求发送到服务器,要经历一个生命周期,服务端要: 监听请求-解析请求-响应请求,服务器在处理这一过程的时候,有时候就很复杂了,将这些复杂的业务拆 ...
- vue的checkbox或多选的select的代码例子
另外一种实现checkbox的vue绑定方法代码: 给v-model绑定一个相同的数组类型的属性: <div id="app"> <label>jack&l ...
- 自定义实现一个loghub(或kafka)的动态分片消费者负载均衡?
一般地,像kafka之类的消息中间件,作为一个可以保持历史消息的组件,其消费模型一般是主动拉取方式.这是为了给消费者足够的自由,回滚或者前进. 然而,也正是由于将消费消息的权力交给了消费者,所以,消费 ...
- 编解码器之战:AV1、HEVC、VP9和VVC
视频Codec专家Jan Ozer在Streaming Media West上主持了一场开放论坛,邀请百余名观众参与热门Codec的各项优势与短板.本文整理了讨论的主要成果,基本代表了AV1.HEVC ...
- [Vue 牛刀小试]:第十四章 - 编程式导航与实现组件与 Vue Router 之间的解耦
一.前言 在上一章的学习中,通过举例说明,我们了解了 Vue Router 中命名路由.命名视图的使用方法,以及如何通过 query 查询参数传参,或者是采用 param 传参的方式实现路由间的参数传 ...
- 一文秒懂CPU使用率
目录 CPU:Cores, and Hyper-Threading 超线程(Hyper-Threading ) 多核(multi-cores) CPU使用率计算 CPU使用率测试 如何计算CPU使用 ...