HBase是大表(BigTable)思想的一個具體實現。它是一個列式存儲的NoSQL數據庫,適合執行數據的分析和處理。簡單來說,就是適合執行查詢操作。從體系架構的角度看,HBase是一種主從架構,包含:HBase HMaster、Region Server和ZooKeeper,下圖展示了這一架構。
其中:
- HBase HMaster負責Region的分配及數據庫的創建和刪除等操作。
- Region server負責數據的讀寫服務。
- ZooKeeper負責維護集群的狀態。
視頻講解如下 |
---|
【趙渝強老師】HBase的體系架構 |
下面詳細討論HBase體系架構中每一個組成部分的作用。
一、 HMaster
HMaster是整個HBase集群的主節點,它的職責主要體現在以下幾方面:
- 負責在Region Server上分配和調控不同的Region。
- 根據恢復和負載均衡的策略,重新分配Region。
- 監控Region Server的狀態。
- 管理和維護HBase的命名空間,即NameSpace。
- 接收客戶端的請求,提供創建,刪除或者更新表格的接口。
另一方面,如果整個集群中只存在一個HMaser,將造成單點故障的問題。因此也需要基于ZooKeeper來實現HBase的HA(高可用)。但是HBase實現HA非常簡單,因為在其體系架構中已經包含了ZooKeeper,因此只需要手動再啟動一個HMaster作為Backup HMaster即可。
視頻講解如下 |
---|
【趙渝強老師】HBase的主節點HMaster |
二、 Region Server
Region Server負責數據的讀寫操作。一個Region Server可以包含多個Region,而一個Region只能屬于一個Region Server。那么什么是Region呢?可以把Region理解成是列族,它與列族的關系是一對多的關系。HBase表中的列族是根據rowkey的值水平分割成所謂的Region的。在默認情況下,Region的大小是1G,其中包含8個HFile的數據文件。而每個數據文件的大小正好是128M,與HDFS數據塊的大小保存一致。每一個Region server大約可以管理1000個Region。
Region Server除了包含Region以外,還包含WAL預寫日志、Block Cache讀緩存和MemStore寫緩存三個部分。
視頻講解如下 |
---|
【趙渝強老師】HBase的從節點Region Server |
2.1 WAL預寫日志
Write-Ahead Logging是一種高效的日志算法,相當于Oracle中的redo log,或者是MySQL中的binlog。基本原理是在數據寫入之前首先順序寫入日志,然后再寫入緩存,等到緩存寫滿之后統一進行數據的持久化。WAL將一次隨機寫轉化為了一次順序寫加一次內存寫,在提供性能的前提下又保證了數據的可靠性。如果在寫入數據完成之后發生了宕機,即使所有寫緩存中的數據都丟失了,也可以通過恢復WAL日志達到數據恢復的目的。寫入的WAL日志會對應有一個HLog文件。
2.2 Block Cache讀緩存
HBase將經常需要讀取的數據放入Block Cache中,來提供讀取數據的效率。當Block Cache的空間被占滿后,將采用LRU算法將其中被讀取頻率最低的數據從Block Cache中清除。
2.3 MemStore寫緩存
MemStore中主要存儲了還未寫入磁盤的數據,如果此時發生了宕機,這部分數據是會丟失的。HBase中的每一個列族對應一個MemStore,其中存儲的是按鍵排好序的待寫入硬盤的數據,數據也是按Rowkey排好序寫入HFile中的,最終保存到HDFS中。
提示:HBase表中的數據最終保存在數據文件HFile中,并存儲與HDFS的DataNode上。在將MemStore中的數據寫入HFile中的時候,采用順序寫入的機制,避免了磁盤大量尋址的過程,從而大幅提高了性能。在讀取HFile的時候,文件中包含的Rowkey信息會被加載到內存中,這樣就可以保證數據檢索只需一次硬盤查詢操作。
三、 HBase中的ZooKeeper
ZooKeeper在整個HBase集群中主要維護節點的狀態并協調分布式系統的工作。主要體現在以下幾方面:
- 監控HBase節點的狀態,包括:HMaster和RegionServer。
- 通過ZooKeeper的Watcher機制提供節點故障和宕機的通知。
- 保證服務器之間的同步。
- 負責Master選舉的工作。
視頻講解如下:
視頻講解如下 |
---|
【趙渝強老師】HBase中的ZooKeeper |
下圖展示了HBase在ZooKeeper中保存的數據信息。
視頻講解如下 |
---|
【趙渝強老師】HBase中的ZooKeeper |