[ 轉載 ] HBASE啟動指令碼/Shell解析

dd_dong發表於2013-06-19
常用到的HBase啟動指令碼有:
1.$HBASE_HOME/bin/start-hbase.sh

啟動整個叢集

2.$HBASE_HOME/bin/stop-hbase.sh
停止整個叢集

3.$HBASE_HOME/bin/hbase-daemons.sh
啟動或停止,所有的regionserver或zookeeper或backup-master

4.$HBASE_HOME/bin/hbase-daemon.sh
啟動或停止,單個master或regionserver或zookeeper

以start-hbase.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_HOME/bin/hbase的作用:
最終啟動的實現由這個指令碼執行
1.可以通過敲入$HBASE_HOME/bin/hbase檢視其usage
DBA TOOLS
  shell            run the HBase shell
  hbck             run the hbase 'fsck' tool
  hlog             write-ahead-log analyzer
  hfile            store file analyzer
  zkcli            run the ZooKeeper shell
PROCESS MANAGEMENT
  master           run an HBase HMaster node
  regionserver     run an HBase HRegionServer node
  zookeeper        run a Zookeeper server
  rest             run an HBase REST server
  thrift           run the HBase Thrift server
  thrift2          run the HBase Thrift2 server
  avro             run an HBase Avro server

PACKAGE MANAGEMENT
  classpath        dump hbase CLASSPATH
  version          print the version
or
  CLASSNAME        run the class named CLASSNAME

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 /hbase-tianwu-94/master)其得知當前的active master,可以通過(get /hbase-tianwu-94/root-region-server)得知當前root region所在的server,你也可以在測試中通過(delete /hbase-tianwu-94/rs/dwxx.yy.taobao),模擬regionserver與ZK斷開連線,,,
其執行則是呼叫了org.apache.zookeeper.ZooKeeperMain的main函式


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...

8.bin/hbase classpath 列印classpath

9.bin/hbase version 列印hbase版本資訊

10.bin/hbase CLASSNAME, 這個很實用,所有實現了main函式的類都可以通過這個指令碼來執行,比如前面的hlog hfile hbck工具,實質是對這個介面的一個快捷呼叫,而其他未提供快捷方式的class我們也可以用這個介面呼叫,如Region merge 呼叫:
$HBASE_HOME/bin/hbase/org.apache.hadoop.hbase.util.Merge


指令碼使用小結:
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呼叫的就是這個命令

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/42046/viewspace-764227/,如需轉載,請註明出處,否則將追究法律責任。

相關文章