腳本使用小結:
1.開啟集群,start-hbase.sh
2.關閉集群,stop-hbase.sh
3.開啟/關閉【所有】的regionserver、zookeeper,hbase-daemons.sh start/stop regionserver/zookeeper
4.開啟/關閉【單個】的regionserver、zookeeper,hbase-daemon.sh start/stop regionserver/zookeeper
5.開啟/關閉master hbase-daemon.sh start/stop master, 是否成為active master取決於當前是否有active master
兩個進階腳本:
6.rolling-restart.sh 可以用來挨個滾動重啟
7.graceful_stop.sh move服務器上的所有region后,再stop/restart該服務器,可以用來進行版本的熱升級
幾個細節:
1。hbase-daemon.sh start master 與 hbase-daemon.sh start master --backup,這2個命令的作用一樣的,是否成為backup或active是由master的內部邏輯來控制的
2。stop-hbase.sh不會調用hbase-daemons.sh stop regionserver 來關閉regionserver,但是會調用hbase-daemons.sh stop zookeeper/master-backup來關閉zk和backup master,關閉regionserver實際調用的是hbaseAdmin的shutdown接口
3。通過$HBASE_HOME/bin/hbase stop master關閉的是【整個集群】而非單個master,只關閉【單個】master的話使用$HBASE_HOME/bin/hbase-daemon.sh stop master
4。$HBASE_HOME/bin/hbase stop regionserver/zookeeper 不能這么調,調了也會出錯,也沒有路徑會調用這個命令,但是可以通過$HBASE_HOME/bin/hbase start regionserver/zookeeper 來啟動rs或者zk,hbase-daemon.sh調用的就是這個命令
start-hbase.sh的流程如下:
1.運行hbase-config.sh(作用后面解釋)
2.解析參數(0.96版本及以后才可以帶唯一參數autorestart,作用就是重啟)
3.調用hbase-daemon.sh來啟動master;調用hbase-daemons.sh來啟動regionserver zookeeper master-backup
hbase-config.sh的作用:
裝載相關配置,如HBASE_HOME目錄,conf目錄,regionserver機器列表,JAVA_HOME目錄等,它會調用$HBASE_HOME/conf/hbase-env.sh
hbase-env.sh的作用:
主要是配置JVM及其GC參數,還可以配置log目錄及參數,配置是否需要hbase管理ZK,配置進程id目錄等
hbase-daemons.sh的作用:
根據需要啟動的進程,
如為zookeeper,則調用zookeepers.sh
如為regionserver,則調用regionservers.sh
如為master-backup,則調用master-backup.sh
zookeepers.sh的作用:
如果hbase-env.sh中的HBASE_MANAGES_ZK" = "true",那么通過ZKServerTool這個類解析xml配置文件,獲取ZK節點列表(即hbase.zookeeper.quorum的配置值),然后通過SSH向這些節點發送遠程命令:
cd ${HBASE_HOME};
$bin/hbase-daemon.sh --config ${HBASE_CONF_DIR} start/stop zookeeper
regionservers.sh的作用:
與zookeepers.sh類似,通過${HBASE_CONF_DIR}/regionservers配置文件,獲取regionserver機器列表,然后SSH向這些機器發送遠程命令:
cd ${HBASE_HOME};
$bin/hbase-daemon.sh --config ${HBASE_CONF_DIR} start/stop regionserver
master-backup.sh的作用:
通過${HBASE_CONF_DIR}/backup-masters這個配置文件,獲取backup-masters機器列表(默認配置中,這個配置文件並不存在,所以不會啟動backup-master),然后SSH向這些機器發送遠程命令:
cd ${HBASE_HOME};
$bin/hbase-daemon.sh --config ${HBASE_CONF_DIR} start/stop master --backup
hbase-daemon.sh的作用:
無論是zookeepers.sh還是regionservers.sh或是master-backup.sh,最終都會調用本地的hbase-daemon.sh,其執行過程如下:
1.運行hbase-config.sh,裝載各種配置(java環境、log配置、進程ID目錄等)
2.如果是start命令?
滾動out輸出文件,滾動gc日志文件,日志文件中輸出啟動時間+ulimit -a信息,如
“Mon Nov 26 10:31:42 CST 2012 Starting master on dwxx.yy.taobao”
"..open files (-n) 65536.."
3.調用$HBASE_HOME/bin/hbase start master/regionserver/zookeeper
4.執行wait,等待3中開啟的進程結束
5.執行cleanZNode,將regionserver在zk上登記的節點刪除,這樣做的目的是:在regionserver進程意外退出的情況下,可以免去3分鍾的ZK心跳超時等待,直接由master進行宕機恢復
6.如果是stop命令?
根據進程ID,檢查進程是否存在;調用kill命令,然后等待到進程不存在為止
7.如果是restart命令?
調用stop后,再調用start。。。
HBase參數解析:
2.bin/hbase shell,這個就是常用的shell工具,運維常用的DDL和DML都會通過此進行,其具體實現(對hbase的調用)是用ruby寫的
3.bin/hbase hbck, 運維常用工具,檢查集群的數據一致性狀態,其執行是直接調用org.apache.hadoop.hbase.util.HBaseFsck中的main函數
4.bin/hbase hlog, log分析工具,其執行是直接調用org.apache.hadoop.hbase.regionserver.wal.HLogPrettyPrinter中的main函數
5.bin/hbase hfile, hfile分析工具,其執行是直接調用org.apache.hadoop.hbase.io.hfile.HFile中的main函數
6.bin/hbase zkcli,查看/管理ZK的shell工具,很實用,經常用,比如你可以通過(get /IP/master)其得知當前的active master,可以通過(get /IP/root-region-server)得知當前root region所在的server,你也可以在測試中通過(delete /IP/rs/dwxx.yy.taobao),模擬regionserver與ZK斷開連接,
其執行則是調用了org.apache.zookeeper.ZooKeeperMain的main函數
7.bin/hbase classpath 打印classpath
8.bin/hbase version 打印hbase版本信息
7.回歸到剛才hbase-daemon.sh對此腳本的調用為:
$HBASE_HOME/bin/hbase start master/regionserver/zookeeper
其執行則直接調用
org.apache.hadoop.hbase.master.HMaster
org.apache.hadoop.hbase.regionserver.HRegionServer
org.apache.hadoop.hbase.zookeeper.HQuorumPeer
的main函數,而這些main函數就是了new一個了Runnable的HMaster/HRegionServer/QuorumPeer,在不停的Running...