1.概述
今天補充一篇HBase集群的搭建,這個是高可用系列遺漏的一篇博客,今天抽時間補上,今天給大家介紹的主要內容目錄如下所示:
- 基礎軟件的准備
- HBase介紹
- HBase集群搭建
- 單點問題驗證
- 截圖預覽
那么,接下來我們開始今天的HBase集群搭建學習。
2.基礎軟件的准備
由於HBase的數據是存放在HDFS上的,所以我們在使用HBase時,確保Hadoop集群已搭建完成,並運行良好。若是為搭建Hadoop集群,請參考我寫的《配置高可用的Hadoop平台》來完成Hadoop平台的搭建。另外,我們還需要准備好HBase的安裝包,這里我所使用的HBase-1.0.1,Hadoop版本使用的是2.6.0,基礎軟件下載地址如下所示:
HBase安裝包 《下載地址》
在准備好基礎軟件后,我們來介紹一下HBase的相關背景。
3.HBase介紹
在使用HBase的時候,我們需要清楚HBase是用來干什么的。HBase是一個分布式的、面向列的開源數據庫,就像Bigtable利用了Google文件系統(File System)所提供的分布式數據存儲一樣,HBase在Hadoop之上提供了類似於Bigtable的能力。HBase是Apache的Hadoop項目的子項目。HBase不同於一般的關系數據庫,它是一個適合於非結構化數據存儲的數據庫。另一個不同的是HBase基於列的而不是基於行的模式。它是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集群。
接下來我們來看看HBase的使用場景,HBase有如下使用場景:
- 大數據量 (100s TB級數據) 且有快速隨機訪問的需求。
- 例如淘寶的交易歷史記錄。數據量巨大無容置疑,面向普通用戶的請求必然要即時響應。
- 容量的優雅擴展。
- 大數據的驅使,動態擴展系統容量的必須的。例如:webPage DB。
- 業務場景簡單,不需要關系數據庫中很多特性(例如交叉列、交叉表,事務,連接等等)。
- 優化方面:合理設計rowkey。因為hbase的查詢用rowkey是最高效的,也幾乎的唯一生產環境可行的方式。所以把你的查詢請求轉換為查詢rowkey的請求吧。
4.HBase集群搭建
在搭建HBase集群時,既然HBase擁有高可用特性,那么我們在搭建的時候要充分利用這個特性,下面給大家一個HBase的集群搭建架構圖,如下圖所示:
這里由於資源有限,我將HBase的RegionServer部署在3個DN節點上,HBase的HMaster服務部署在NNA和NNS節點,部署2個HMaster保證集群的高可用性,防止單點問題。下面我們開始配置HBase的相關配置,這里我使用的是獨立的ZK,未使用HBase自帶的ZK。
- hbase-env.sh
# The java implementation to use. Java 1.7+ required. export JAVA_HOME=/usr/java/jdk1.7 # Tell HBase whether it should manage it's own instance of Zookeeper or not. export HBASE_MANAGES_ZK=false
- hbase-site.xml
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>hbase.zookeeper.quorum</name> <value>dn1:2181,dn2:2181,dn3:2181</value> <description>The directory shared by RegionServers. </description> </property> <property> <name>hbase.zookeeper.property.clientPort</name> <value>2181</value> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/home/hadoop/data/zk</value> <description>Property from ZooKeeper config zoo.cfg. The directory where the snapshot is stored. </description> </property> <property> <name>hbase.rootdir</name> <value>hdfs://cluster1/hbase</value> <description>The directory shared by RegionServers. </description> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> <description>The mode the cluster will be in. Possible values are false: standalone and pseudo-distributed setups with managed Zookeeper true: fully-distributed with unmanaged Zookeeper Quorum (see hbase-env.sh) </description> </property> </configuration>
- regionservers
dn1
dn2
dn3
5.單點問題驗證
在配置完成集群后,我們開始啟動集群,需要注意的時,在啟動集群之前確保各個節點之間的時間是同步的,或者時間差不能太大,若時間差太大,會導致HBase啟動失敗。下面我們在NNA節點輸入啟動命令,命令內容如下所示:
[hadoop@nna ~]$ start-hbase.sh
然后,我們在NNS節點上在啟動一個HMaster進程,啟動命令如下所示:
[hadoop@nns ~]$ hbase-daemon.sh start master
然后,我們在各個節點輸入jps命令查看相關啟動進程,各個節點分布的進程如下表所示:
節點 | 進程 |
NNA | HMaster |
NNS | HMaster |
DN1 | RegionServer |
DN2 | RegionServer |
DN3 | RegionServer |
截圖如下所示:
HBase的Web管理界面,默認端口是16010,這里我先啟動的是NNA的HMaster,所提NNA節點HMaster對外提供服務,截圖如下所示:
下面我kill掉NNA節點的HMaster進程,命令如下所示:
[hadoop@nna ~]$ kill -9 2542
然后,我們在查看相應的服務,由於我們使用了ZK,它會選擇一個主服務出來,即NNS節點對外提供HMaster服務,截圖如下所示:
通過驗證,HBase的高可用性正常,避免存在單點問題。
6.截圖預覽
下面給出HBase數據庫的截圖預覽,如下圖所示:
7.總結
這里需要注意的是,在搭建HBase集群的時候需要保證Hadoop平台運行正常,各個節點的時間差不能相差太大,最后時間能夠同步。否則會導致HBase的啟動失敗。另外,如果在啟動HBase集群時,提示不能解析HDFS路徑,這里將Hadoop的core-site.xml和hdfs-site.xml文件復制到HBase的conf文件目錄下即可。
8.結束語
這篇博客就和大家分享到這里,如果大家在研究學習的過程當中有什么問題,可以加群進行討論或發送郵件給我,我會盡我所能為您解答,與君共勉!