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发送数据 ...
随机推荐
- xmanager小技巧
使用manager时候,左键选中之后,直接右键粘贴,能带来效率的提升.虽然是小技巧,但有人还是不知道,这里简单写一下,供需要的同学参考. 简单二步设置: 1.工具-选项
- ORACLE(emp)表习题与答案
因为答案都是小编自己写的,解法可能有多种,如果您觉得我的解法有误,希望您有时间给我留言. 一.习题 (1) 查询20部门的所有员工信息. SELECT * FROM emp where deptno ...
- SpringBoot启动访问JSP页面,直接进入页面或者访问不到,报404,并且加载tomcat插件tomcat-embed-jasper也不行
这个问题花费了两天的时间,解决路径: 我用的是SpringBoot1.5.2,SpringMVC和Spring,tomcat启动插件都是默认的版本,Spring是4.3.7,jdk是1.7.0_80, ...
- Android 即时通讯开发小结(一)
<Android 即时通讯开发小结>基于IM Andriod 开发的各种常见问题,结合网易云信即时通讯技术的实践,对IM 开发做一个全面的总结. 相关推荐阅读:. Android 即时通讯 ...
- Python调试器-pdb的使用
[简介] pdb是python自带的一个包,为python程序提供了一种交互的源代码调试功能. [使用方法] 1. 使用命令: python -m pdb xxx.py #可以直接进入单步执行模式 2 ...
- 简单DI
<?php class DI { private $container; public function set($key, $obj, ...$args) { $this->contai ...
- PowerDesigner16.5 有用地址
http://blog.csdn.net/keenweiwei/article/details/32720427
- H5 离线缓存的用法
H5离线缓存基础系列 1.什么是离线缓存 离线缓存:离线缓存可以将站点的一些文件缓存到本地,它是浏览器自己的一种机制,将需要的文件缓存下来,以便后期即使没有连接网络,被缓存的页面也可以展示. 2. ...
- 详解Linux运维工程师必备技能
张戈大神是腾讯的一名运维,张戈博客也是我接触到第一个 Linux 运维师的博客,最近也在接触 Linux,说到工具,在行外可以说是技能,在行内一般称为工具,就是运维必须要掌握的工具. 我就大概列出这几 ...
- python数据分析与挖掘实战
<python数据分析与挖掘实战>PDF&源代码&张良均 下载:链接:https://pan.baidu.com/s/1TYb3WZOU0R5VbSbH6JfQXw提取码: ...