【Storm】集群统一启动和停止shell脚本开发

hadoop集群有统一启动的命令

start-all.sh    启动全部进程
stop-all.sh     停止全部进程

hadoop如果用cdh版本 + Cloudera Manager界面化管理,直接在界面上点击按钮即可启动集群。

而storm集群有多个进程在运行,只能运行以下命令逐一去停止

kill -9 进程id

这样子很不方便,可以采用shell脚本来启停所有storm进程。

 

日志查看

0.9.0版本开始storm增加了一个很给力的特性logviewer,在早期的版本里,查看worker节点的日志决定于worker节点的位置(host/port),典型的是通过storm UI,然后用ssh连接那台主机查看改主机上worker的日志文件。

 

在最新的日志查看机制里,现在可以很容易的去访问一个指定worker节点的日志,你只需要在浏览器的storm UI里点击worker的port就可以。

 

新的logviewer进程与supervisor是相对独立的进程,如果是在新的storm里启动了它,你只需要在集群的supervisor节点执行如下命令

storm logviewer

另外,0.9以后的storm新版本里面大量使用slf4j的API,而有些storm的依赖库或storm的使用者则依赖于log4j的API。所以现在storm改为依赖于log4j-over-slf4j,他可以在log4j和slf4j之间架起一座桥梁。

 

案例实践:

1、启动zookeeper集群,启动storm集群,启动ui

2、在nimbus启动topology任务

./storm jar /opt/datas/stormjars/storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar lock.PVTopo PVTopo

3、浏览器打开监控界面 http://hadoop-senior:8081/

可以看到topology名称为PVTopo

【Storm】集群统一启动和停止shell脚本开发_第1张图片

进入PVTopo,可以看到spout和bolt

【Storm】集群统一启动和停止shell脚本开发_第2张图片

点击bolt,可以看到每个executor在哪个主机上,以及占用哪个端口。

要查看hadoop-senior02主机上的日志,得在该主机上启动logviewer

nohup ./storm logviewer &

【Storm】集群统一启动和停止shell脚本开发_第3张图片

启动logviewer之后。点击其中对应的port,可以看到log日志。

【Storm】集群统一启动和停止shell脚本开发_第4张图片

 

设置storm的环境变量

因为是用shell脚本运行启动各进程,只有在storm的bin目录下才能识别storm,如果不在bin目录下执行脚本,则不能识别storm命令。所以要设置storm环境变量。

在 /etc/profile 的PATH变量加上storm的bin目录。storm的bin目录以自己的为准。

export PATH=$PATH:/opt/stormmodules/storm-0.9.0.1/bin

再输入以下命令使得更改立即生效

source /etc/profile

 

 

编写启动和停止的shell脚本

1、由于集群分布在多台不同的主机上,所以要用ssh去登陆其他主机,准备主机列表。在hadoop-senior主机storm的bin目录下(所有脚本都在这个目录下,以下简称某台主机的bin目录),创建 supervisor-hosts 文件。nimbus节点同时可作为supervisor节点,所以在supervisor-hosts文件中也加入nimbus所在的主机hadoop-senior。

hadoop-senior
hadoop-senior02

2、supervisor的启动,在hadoop-senior主机的bin目录下创建 start-supervisor.sh 文件

#!/bin/bash
. /etc/profile

nohup storm supervisor & 

3、编写统一启动的shell脚本 ,在hadoop-senior主机的bin目录下创建 start-all.sh 文件。启动nimbus 和 supervisor。

#!/bin/bash
. /etc/profile

#storm的bin目录
bin=/opt/stormmodules/storm-0.9.0.1/bin

#假设每台supervisor上都有start-supervisor.sh
supervisors=/opt/stormmodules/storm-0.9.0.1/bin/supervisor-hosts

#启动主节点nimbus,加上nohup 和 & 是让进程在后台运行
nohup ./storm nimbus &

#逐行读取host,循环对每一个host的start-supervisor.sh进行操作
cat $supervisors | while read supervisor
do
	echo $supervisor
	echo $bin
	ssh $supervisor $bin/start-supervisor.sh &
done

4、supervisor的停止,在hadoop-senior主机的bin目录下创建 stop-supervisor.sh 文件。用的是  kill -9 进程id  直接杀死进程,所以要先找出supervisor的进程。

#!/bin/bash
. /etc/profile

#停止supervisor
kill -9 `ps -ef | grep daemon.supervisor | grep -v grep | awk '{print $2}'`

5、编写统一停止的shell脚本 ,在hadoop-senior主机的bin目录下创建 stop-all.sh 文件。停止nimbus 和 supervisor。

#!/bin/bash
. /etc/profile

bin=/opt/stormmodules/storm-0.9.0.1/bin

#假设每台supervisor上都有stop-supervisor.sh
supervisors=/opt/stormmodules/storm-0.9.0.1/bin/supervisor-hosts

#停止主节点nimbus
kill -9 `ps -ef | grep daemon.nimbus | grep -v grep | awk '{print $2}'`

#循环对每一个host的stop-supervisor.sh进行操作
cat $supervisors | while read supervisor
do
	echo $supervisor
	ssh $supervisor $bin/stop-supervisor.sh &
done

 

启动和停止脚本拷贝到supervisor所在的主机以及赋予权限

1、把启动和停止脚本拷贝到supervisor所在的主机的bin目录下,这里只有一台supervisor主机 hadoop-senior02

scp ./start-supervisor.sh hadoop-senior02:/opt/stormmodules/storm-0.9.0.1/bin
scp ./stop-supervisor.sh hadoop-senior02:/opt/stormmodules/storm-0.9.0.1/bin

2、赋予hadoop-senior当前登陆用户读取 supervisor-hosts 文件的权限

chmod +r supervisor-hosts

3、赋予hadoop-senior当前登陆用户执行启动、启动全部、停止、停止全部脚本文件的权限

chmod +x start-supervisor.sh start-all.sh stop-supervisor.sh stop-all.sh

4、赋予hadoop-senior02当前登陆用户执行启动、停止脚本文件的权限

chmod +x start-supervisor.sh stop-supervisor.sh

 

执行启动全部、停止全部的脚本以及观察监控界面

1、在hadoop-senior的bin目录下,执行启动全部的脚本 

./start-all.sh

2、在hadoop-senior的bin目录下,启动 ui 监控界面

nohup ./storm ui &

3、打开监控界面 http://hadoop-senior:8081/,观察已经启动的supervisor

在界面的Supervisor summary可以看到,有2个supervisor,主机分别为hadoop-senior和hadoop-senior02

【Storm】集群统一启动和停止shell脚本开发_第5张图片

4、在hadoop-senior的bin目录下,执行停止全部的脚本 

./stop-all.sh

5、打开监控界面 http://hadoop-senior:8081/,打不开,nimbus已经被停止,所以ui监控界面也不能观察到集群的信息。

【Storm】集群统一启动和停止shell脚本开发_第6张图片

 

 

 

 

你可能感兴趣的:(大数据,Storm)