storm 配置文件(storm配置文件)
feilongw 2025-03-25 19:12 70 浏览
Storm 集群搭建及编写WordCount
1. 下载zookeeper-
2. 下载Storm apache-storm-
3. 安装JDK
注:
Storm0.9之前的版本,底层通讯用的是ZeroMQ,所以在安装之前的版本需要安装0MQ,但是在之后 我们直接安装就可以了。
因为在storm被移交到apache之后,这块用java的NIO矿建Netty代替了。
首先建立hadoop用户,我把和大数据相关的框架和软件都放在hadoop用户中。
安装ZK
1. 登陆到并解压tar包
2. 建立zookeeper的data目录,
/home/hadoop/zookeeper/data
mkdir -p /home/hadoop/zookeeper/data
3. 建立zk集群的myid文件 (单机版可以跳过该步)
cd /home/hadoop/zookeeper/data
echo 1 > myid
4. 拷贝zookeeper的conf/zoo_sample.cfg并重命名为zoo.cfg,修改如下:
dataDir=/home/hadoop/zookeeper/data
server.1=::
server.2=::
server.3=::
dataDir是配置zk的数据目录的
server.A=B:C:D是集群zk使用的。如果你只想用单个zk,可以不配置。
A - 是一个数字,表示这是第几号服务器。与/var/tmp/zkdata下的myid文件内容一致
B - 是该服务器的IP地址
C - 表示该服务器与集群中的Leader服务器交换信息的端口
D - 表示如果万一集群中的Leader服务器挂了,需要各服务器重新选举时所用的通讯端口
5. (Optional)将zk的bin目录路径加入环境变量
修改/etc/profile文件,在尾部添加如下:
#zookeeper
export ZOOKEEPER==/home/hadoop/zookeeper
PATH=$PATH:$ZOOKEEPER/bin
6. 启动zk
zkServer.sh start
在剩下两台机器重复以上步骤,注意myid要对应
6.查看zk的运行状态
zkServer.sh status
安装Storm
1. 解压tar包并赋予执行权限
2. 将Storm的bin目录加入系统路径
修改/etc/profile文件,在尾部加入如下:
PATH=$PATH:/home/hadoop/storm
使其生效
3. 创建一个Storm的本地数据目录
mkdir -p /home/hadoop/storm/data
以上步骤在Storm的集群上的其他机器上重复执行,然后进行配置:
a. 配置storm.yaml
修改storm的conf/storm.yaml文件如下:
storm.zookeeper.servers: #zk地址
- ""
- ""
- ""
nimbus.host: "" #master 节点地址
supervisor.slots.ports:
-
-
-
-
storm.local.dir: "/home/hadoop/storm/data" #数据存放地址
注意:
在每个配置项前面必须留有空格,否则会无法识别。
启动集群
1. 启动nimbus
在nimbus机器的Storm的bin目录下执行
nohup bin/storm nimbus >/dev/null 2>&1 & #启动主节点
nohup bin/storm ui >/dev/null 2>&1 & #启动stormUI
nohup bin/storm logviewer >/dev/null 2>&1 & #启动logviewer 功能
2. 启动supervisor
在supervisor机器的Storm的bin目录下执行,所有supervisor节点都使用如下命令
nohup bin/storm supervisor >/dev/null 2>&1 &
nohup bin/storm logviewer >/dev/null 2>&1 &
3. 检查
打开Storm UI 页面。
http://:/index.html
默认是启在端口上,如果你想改成其他的,如,直接修改nimbus的storm.yaml文件,添加
ui.port=
部署程序
1. 这里我使用 Intellij IDEA + maven来开发一个wordcount的Demo
2. 添加maven依赖
1. 这里我使用 Intellij IDEA + maven来开发一个wordcount的Demo部署程序
2. 添加maven依赖
3. 新建项目,编写程序
package cn.oraclers.storm;
import backtype.storm.Config;
import backtype.storm.StormSubmitter;
import backtype.storm.generated.AlreadyAliveException;
import backtype.storm.generated.InvalidTopologyException;
import backtype.storm.spout.SpoutOutputCollector;
import backtype.storm.task.OutputCollector;
import backtype.storm.task.TopologyContext;
import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.topology.TopologyBuilder;
import backtype.storm.topology.base.BaseRichBolt;
import backtype.storm.topology.base.BaseRichSpout;
import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Tuple;
import backtype.storm.tuple.Values;
import backtype.storm.utils.Utils;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class WordCount {
public static class SpoutSource extends BaseRichSpout {
Map map;
TopologyContext topologyContext;
SpoutOutputCollector spoutOutputCollector;
Random random;
@Override
public void open(Map map, TopologyContext topologyContext, SpoutOutputCollector spoutOutputCollector) {
map = map;
topologyContext = topologyContext;
spoutOutputCollector = spoutOutputCollector;
random = random;
}
String[] sentences = new String[]{ "the cow jumped over the moon", "an apple a day keeps the doctor away",
"four score and seven years ago", "snow white and the seven dwarfs", "i am at two with nature" };
@Override
public void nextTuple() {
Utils.sleep);
for (String sentence:sentences){
spoutOutputCollector.emit(new Values(sentence));
}
}
@Override
public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
outputFieldsDeclarer.declare(new Fields("sentence"));
}
}
public static class SplitBoltSource extends BaseRichBolt{
Map map;
TopologyContext topologyContext;
OutputCollector outputCollector;
@Override
public void prepare(Map map, TopologyContext topologyContext, OutputCollector outputCollector) {
map = map;
topologyContext = topologyContext;
outputCollector = outputCollector;
}
@Override
public void execute(Tuple tuple) {
String sentence = tuple.getStringByField("sentence");
String[] words = sentence.split(" ");
for (String word:words){
this.outputCollector.emit(new Values(word));
}
}
@Override
public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
outputFieldsDeclarer.declare(new Fields("word"));
}
}
public static class SumBoltSource extends BaseRichBolt{
Map map;
TopologyContext topologyContext;
OutputCollector outputCollector;
@Override
public void prepare(Map map, TopologyContext topologyContext, OutputCollector outputCollector) {
this.map = map;
this.topologyContext = topologyContext;
this.outputCollector = outputCollector;
}
Map
@Override
public void execute(Tuple tuple) {
String word = tuple.getStringByField("word");
Integer count = mapCount.get(word);
if(count == null){
count=0;
}
count++;
mapCount.put(word,count);
outputCollector.emit(new Values(word,count));
}
@Override
public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
outputFieldsDeclarer.declare(new Fields("word", "count"));
}
}
public static void main(String[] args) throws AlreadyAliveException, InvalidTopologyException {
TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("data_source",new SpoutSource());
builder.setBolt("bolt_split",new SplitBoltSource()).shuffleGrouping("data_source");
builder.setBolt("bolt_sum",new SplitBoltSource()).fieldsGrouping("bolt_split",new Fields("word"));
try {
Config stormConf = new Config();
stormConf.setDebug(true);
StormSubmitter.submitTopology("Clustertopology", stormConf,builder.createTopology());
} catch (AlreadyAliveException e) {
e.printStackTrace();
} catch (InvalidTopologyException e) {
e.printStackTrace();
}
}
}
4. 打包部署topology
./storm jar storm jar sd--SNAPSHOT.jar cn.oraclers.storm.WordCount
5. 查看结果
两种方式,
a. 查看StormUI
注意:一定不要使用IE内核的浏览器,否则看不到Topology Summary 下面的东西!!!
b. storm的bin目录下运行
Topology_name Status Num_tasks Num_workers Uptime_secs
-------------------------------------------------------------------
test ACTIVE
Clustertopology ACTIVE
mytopo ACTIVE
6. 关闭topology
a. StormUI上面点选要关闭的topology,如test,然后在新页面的Topology actions中选kill
b. 运行./storm kill test
相关推荐
- java-verbose是什么意思 java -verbose
-
灵魂拷问:为什么short、byte会被提升为int?boolean到底多大?为什么short、byte会被提升为int?在学习Java语法的时候,知道short、byte、byte类型在做运...
- Android Hanlder 揭密之路- 深入理解异步消息传递机制Looper、Handler、Message三者关系
-
Handler知识点梳理:Handler、Looper以及Message三者之间的关系前言Handler、Looper以及Message之间的关系,概括性来说,Looper负责的是创建一个Me...
- csdn freemarker jquery 预览word
-
高质量人才助推高质量发展——西安市高新区“精益创业带动就业示范行动”系列活动西安市高新区“精益创业带动就业示范行动”系列活动已于8月日在高新区软件新城正式启动。本周五(8月日)上午点分,系列活动之“直...
- android 修改菜单menu背景
-
教你把手机的状态栏和通知栏改造成安卓L风格说道颜值,就得吐槽一下安卓及一下的版本了。原生真的是丑,丑到没朋友。到了安卓,谷歌终于大刀阔斧的对安卓的颜值进行了大动刀。【下拉通知栏】那么,安卓有没有办法搞...
- DCDC架构中 dcdc类型(dcdc的主要作用)
-
DC-DC工作原理,看完你就懂了上篇文章说了LDO的原理,那本篇就来说一下DCDC的工作原理吧。开关电源:是一种高频化电能转换装置,其主要利用电力电子开关器件(如晶体管、MOS管、可控晶闸管等),通过...
- getPath(),getAbsolutePath(),getCanonicalPath() 区别
-
java获取文件路径1.前言Java开发中我们经常要获取文件的路径,比如读取配置文件等等。今天我们就关于文件的路径和如何读取文件简单地探讨一下。2.文件的路径文件的路径通常有相对路径与绝对...
- android 多任务键app后台重新唤起生命周期 安卓任务管理器快捷键
-
好用的备忘录待办提醒APP任务管理工具怎么选?在这个信息高速流通的时代,选择一款合适的任务管理应用变得尤为关键。一个好的任务管理工具不仅能帮助我们更好地规划时间、提升效率,还能在快节奏的生活中保持条...
- android数据包下载地址 数据包apk
-
《地牢猎手5》安卓怎么下载APK数据包下载万众期待的地牢猎手5终于推出啦,此次Gameloft在安卓平台首发推出,不过目前谷歌商店还未提供正式下载数据包,不过不用担心,蚕豆网小编为大家带来了地牢猎手...
- 51c大模型~合集24(c5.0模型)
-
北大校友打造的个智能体「我的世界」,背后原理揭晓了!来源:量子位北大校友打造的个智能体「我的世界」,背后原理揭晓了!团队全新公开页技术报告,详尽解密AI智能体如何产生专业化分工、社交互动、甚至传播虚拟...
- ao3archive of own our如何使用
-
肖战ao3事件始末揭秘ao3是啥意思肖战粉丝举报AO3为什么惹众怒3月4日凌晨2时分,肖战工作室再次发表声明:肖战海外社交账号已无法正常登陆,任何更改均非本人及工作人员操作,后续动作均与肖战本人无关...
- ansible变量运算 ansible查看变量的命令
-
Python中的Ansible库在Python中集成Ansible功能,主要通过以下两种方式实现,结合官方库和核心API可满足不同场景的自动化需求:一、AnsibleRunner库Ansible官方...
- 25个简单shell例子(shell实例讲解)
-
shell编程其实真的很简单(一)如今,不会Linux的程序员都不意思说自己是程序员,而不会shell编程就不能说自己会Linux。说起来似乎shell编程很屌啊,然而不用担心,其实shell编程真的...
- ByConity ELT 测试体验
-
字节跳动开源云原生数仓引擎ByConity技术详解与应用导读本文介绍字节跳动开源的云原生数仓引擎,ByConity。主要包含四个主题:1.ByConity产生背景2.ByConity设计...
- 45个小众而实用的NLP开源字典和工具
-
从算法到产品:NLP技术的应用演变文章回顾了近几年NLP的发展历程,从项目实施的两个阶段中带我们梳理了NLP技术的应用演变。第一个与大家分享的Case,基于NLP展开。分为3个部分,分别是NLP的发展...
- [美国]《速度与激情6》[HD-RMVB.1024x576.中英双字][2013年动作]
-
安利电影。爱情:不良教育里克(费雷o马丁内兹饰)和伊格莱西奥(弗朗西斯科o拜奥拉饰)是教会学校的同学,更是一对同性恋人。学校的莫雷神父以留下恩里克为诱饵占有了伊格莱西奥,但最终恩里克还是离开了教会...
- 一周热门
- 最近发表
-
- java-verbose是什么意思 java -verbose
- Android Hanlder 揭密之路- 深入理解异步消息传递机制Looper、Handler、Message三者关系
- csdn freemarker jquery 预览word
- android 修改菜单menu背景
- DCDC架构中 dcdc类型(dcdc的主要作用)
- getPath(),getAbsolutePath(),getCanonicalPath() 区别
- android 多任务键app后台重新唤起生命周期 安卓任务管理器快捷键
- android数据包下载地址 数据包apk
- 51c大模型~合集24(c5.0模型)
- ao3archive of own our如何使用
- 标签列表
-