storm启停脚本的编写:
第一步:在master节点创建start-supervisor.sh脚本,然后分发到各个服务器,就可以通过运行该脚本开启supervisor服务
start-supervisor.sh脚本
#!/bin/bash
#使配置的storm环境变量生效
source /home/hadoop/.bashrc
#后台运行supervisor
nohup storm supervisor >/dev/null 2>&1 &
第二步:在master节点创建supervisor-hosts文件,用来存放主机名
supervisor-hosts
hadoop02
hadoop03
hadoop04
第三步:在master节点创建start-all.sh启动所有supervisor
start-all.sh
#!/bin/bash
source /home/hadoop/.bashrc
#重写bin和supervisor目录
bin=/home/hadoop/apps/apache-storm-0.9.7/bin
supervisors=/home/hadoop/apps/apache-storm-0.9.7/bin/supervisor-hosts
#启动主节点
nohup storm nimbus >/dev/null 2>&1 &
#读取supervisor-hosts文件中每一个节点执行start-supervisor.sh脚本启动supervisor服务
#while后面的supervisor用来接收读取到的每一行数据
cat $supervisors | while read supervisor
do
echo $supervisor
ssh $supervisor $bin/start-supervisor.sh
done
第四步:写停止脚本
stop-all.sh
#!/bin/bash
source /home/hadoop/.bashrc
#重写bin和supervisor目录
bin=/home/hadoop/apps/apache-storm-0.9.7/bin
supervisors=/home/hadoop/apps/apache-storm-0.9.7/bin/supervisor-hosts
#把nimbus相关的进程都杀掉
kill -9 `ps -ef | grep java | grep nimbus | awk '{print $2}'`
#停止所有的supervisor
cat $supervisors | while read supervisor
do
echo $supervisor
ssh $supervisor $bin/stop-supervisor.sh &
done
第五步:在各节点的storm的bin目录下编写脚本stop-supervisor.sh
stop-supervisor.sh
#!/bin/bash
source /home/hadoop/.bashrc
#杀死supervisor进程
kill -9 `ps -ef | grep java | grep supervisor | awk '{print $2}'`
第六步:上传所有脚本到storm/bin目录下,并将start-supervisor.sh和stop-supervisor.sh分发到所有storm集群节点:Hadoop02,Hadoop04
第七步:为了防止重名:修改脚本名字为 storm-start-all.sh 和 storm-stop-all.sh
第八步:修改所有脚本运行权限:chmod 755 *.sh
在家目录下运行stop-storm-all.sh脚本
出错:
错误一:-bash: /home/hadoop/apps/apache-storm-0.9.7/bin/start-storm-all.sh: /bin/bash^M: bad interpreter: No such file or directory
[hadoop@hadoop03 bin]$ sh start-storm-all.sh
: No such file or directory /home/hadoop/.bashrc
先注释掉.bashrc命令行,在外部手动开启全局环境变量
错误二:单独运行脚本stop-supervisor.sh arguments must be process or job IDs0
storm搭建:
官网:storm.apache.org
版本:apache-storm-1.1.1.tar.gz
配置文件storm.yaml的修改
参考http://storm.apache.org/releases/1.1.1/Setting-up-a-Storm-cluster.html
1)storm.zookeeper.servers: This is a list of the hosts in the Zookeeper cluster for your Storm cluster. It should look something like:
storm.zookeeper.servers:
- "hadoop02"
- "hadoop03"
- "hadoop04"
2)storm.local.dir
storm.local.dir:"/home/hadoop/log/storm"
3)nimbus.seeds:---主节点
nimbus.host: "hadoop03"
4)supervisor.slots.ports:
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
发送安装包
运行storm集群
在主节点运行Nimbus:【Hadoop03】bin/storm nimbus
后台:nohup storm nimbus >/dev/null 2>&1 &
启动后台ui管理界面:nohup storm ui >/dev/null 2>&1 &
在其余节点运行Supervisor:bin/storm supervisor
后台:nohup storm supervisor >/dev/null 2>&1 &
在UI界面查看storm: http://{ui host}:8080.
强制杀死:kill -s -9 进程号
搭建集群中遇到的问题:
1、参数supervisor.slots.ports是用来指定一个节点最多可以运行的task的数目,storm中一个节点最多四个task,其中的一个端口号表示一个task任务
2、启动storm之前可以先配置环境变量,然后在家目录下就可以执行命令
nohup storm nimbus >/dev/null 2>&1 &
nohup storm supervisor >/dev/null 2>&1 &
3、要查看storm的ui界面,首先要在后台开启ui管理界面才能访问
nohup storm ui >/dev/null 2>&1 &
4、nimbus和supervisor的节点选取:nimbus选取在Hadoop03(hdfs的active NameNode,纯属主观意愿),supervisor的节点选取在Hadoop02,Hadoop03,Hadoop04
5、nimbus,supervisor是什么?
storm中8大概念:
1)Topologies:拓扑任务:地铁运送乘客的任务,其中包含多个spout和bolt
2)Streams:地铁5号线,运送乘客(数据)
3)Spouts:起始站
4)Bolts:中间站
5)Stream groupings
6)Reliability
7)Tasks
8)Workers
storm架构:
默认情况下,一个supervisor节点最多可以启动4个worker进程,每一个topology默认占用一个worker进程,每个worker进程会启动1个或者多个executor,每个executor启动1个task。
最重要的是并行度/高并发以及线程安全的实现。