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
进入PVTopo,可以看到spout和bolt
点击bolt,可以看到每个executor在哪个主机上,以及占用哪个端口。
要查看hadoop-senior02主机上的日志,得在该主机上启动logviewer
nohup ./storm logviewer &
启动logviewer之后。点击其中对应的port,可以看到log日志。
因为是用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
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
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
4、在hadoop-senior的bin目录下,执行停止全部的脚本
./stop-all.sh
5、打开监控界面 http://hadoop-senior:8081/,打不开,nimbus已经被停止,所以ui监控界面也不能观察到集群的信息。