大家都知道在Hadoop集羣開啓/關閉Zookeeper集羣的時候,需要到不同的節點ZK的bin目錄下執行對應的啓動/關閉腳本,十分的麻煩。所以就有了以下腳本的產生~
一鍵開啓Zookeeper
vim /export/servers/zookeeper-3.4.5-cdh5.14.0/bin/zk_startall.sh
for host in node01 node02 node03
do
ssh $host "source /etc/profile;nohup /export/servers/zookeeper-3.4.5-cdh5.14.0/bin/zkServer.sh start >/dev/null 2>&1
&"
echo "$host zk is running"
done
一鍵關閉Zookeeper
vim /export/servers/zookeeper-3.4.5-cdh5.14.0/bin/zk_stopall.sh
for host in node01 node02 node03
do
ssh $host "source /etc/profile;jps |grep QuorumPeerMain |cut -c 1-4 |xargs kill -s 9"
echo "$host zk is stopping"
done
正常情況下,大家只要在一臺主節點上添加上述的腳本文件即可~
如果配置了ZK的環境變量,
開啓集羣的ZK服務只要在命令行輸入zk_startall.sh
即可
關閉集羣的ZK服務只要在命令行輸入zk_stopall.sh
即可
但博主在進行日常維護集羣的時候,發現執行zk_stopall.sh的時候,命令行顯示如下問題:
最初的我以爲又是跟之前解決關閉集羣顯示no datanode to stop
(詳情請見《完美解決Hadoop集羣無法正常關閉的問題!》)的情況一樣,但當我檢查了ZK的配置文件之後發現貌似不是這個問題…
vim /export/servers/zookeeper-3.4.5-cdh5.14.0/conf/zoo.cfg
後面待我仔細檢查之前命令行的打印結果,終於發現了本次事故的端倪!
先用jps
查看當前進程
發現zk的進程號66241
怎麼與腳本需要kill的進程號6621
的不一致?還正好差了1位?難道是腳本的shell書寫出了點問題?
後面當我把zk_stopall.sh
腳本重新打開了,檢查了一遍,終於看出來了~
這個腳本獲取的是ZK進程號的前四位,而我ZK的端口號又恰好是5位的,所以一直kill不掉對應的進程,所以只需要把腳本中的4改成5,再重新執行腳本就生效了~
總結
經過這樣的一次"烏龍事件",我給自己的建議就是: 長點心吧(T▽T)