HMaster沒有單點問題,HBase中可以啟動多個HMaster,通過Zookeeper的Master Election機制保證總有一個Master運行。
所以這里要配置HBase高可用的話,只需要啟動兩個HMaster,讓Zookeeper自己去選擇一個Master Acitve。
HBase配置:
在$HBASE_HOME/conf目錄下
1.hbase-site.xml
export HBASE_OPTS="$HBASE_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode"
export JAVA_HOME=/usr/java/jdk1.7.0_60
export HBASE_MANAGES_ZK=false
export HADOOP_HOME=/data/hadoop-2.6.0
export HBASE_LOG_DIR=/data/hadoop/hbase/logs
一個分布式運行的Hbase依賴一個zookeeper集群。所有的節點和客戶端都必須能夠訪問zookeeper。默認的情況下Hbase會管理一個zookeep集群。這個集群會隨着Hbase的啟動而啟動。當然,你也可以自己管理一個zookeeper集群,但需要配置Hbase。你需要修改HBASE_MANAGES_ZK 來切換。這個值默認是true的,作用是讓Hbase啟動的時候同時也啟動zookeeper.
讓Hbase使用一個現有的不被Hbase托管的Zookeep集群,需要設置 HBASE_MANAGES_ZK 屬性為 false
2.hbase-site.xml
<configuration> <property> <name>hbase.rootdir</name> <value>hdfs://appcluster/hbase</value> <description>The directory shared by RegionServers.</description> </property> <property> <name>hbase.master</name> <value>60000</value><!--這里注意了,只需端口即可,不必再寫主機名稱了!--> </property> <property> <name>hbase.zookeeper.quorum</name> <value>hadoop001,hadoop002,hadoop003</value> </property> <property> <name>hbase.zookeeper.property.clientPort</name> <value>2181</value> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/data/hadoop/zookeeper</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <name>hbase.tmp.dir</name> <value>/data/hadoop/hbase/tmp</value> </property> </configuration>
3.regionservers
添加regionserver的hostname
HBase啟動:
在hadoop001上輸入啟動命令
start-hbase.sh
jps可見:
master (因為之前啟動了Hadoop HA,所以會看到很多進程)
23703 NameNode
23968 ResourceManager
24132 DFSZKFailoverController
23813 DataNode
24857 HRegionServer
24723 HMaster
23428 QuorumPeerMain
23522 JournalNode
25448 Jps
24070 NodeManager
regionserver
9832 HRegionServer
8923 QuorumPeerMain
9379 NodeManager
10495 Jps
9197 DataNode
9622 ResourceManager
9006 JournalNode
10436 NameNode
9552 DFSZKFailoverController
在某regionserver上啟動Hmaster
hbase-daemon.sh start master
jps:
9832 HRegionServer
8923 QuorumPeerMain
9379 NodeManager
10495 Jps
9197 DataNode
9622 ResourceManager
9006 JournalNode
10005 HMaster 10436 NameNode
9552 DFSZKFailoverController
這個時候就可以看到HMaster啟動了。
如何區分哪個是Active哪個是standby呢,看log
hbase的log中可以看到
2015-08-07 14:00:14,765 INFO [hadoop002:60000.activeMasterManager] master.ActiveMasterManager: Another master is the active master, hadoop001,60000,1438927191790; waiting to become the next active master
這樣就可以判斷哪台是Active了