Hbase擴容原理
Hbase是Hadoop的一個儲存元件可以提供低延遲的讀寫操作,它一般構建在HDFS之上,可以處理海量的資料。Hbase有個很好的特性是可以自動分片,也就是意味著當表的資料量變得很大的時候,系統可以自動的分配這些資料。
Region與Region Server
Hbase的基本儲存單位是Region,Region是表資料的子集,多個Region的資料集合可以組成一張完成的表資料。Region本質上儲存的一些排好序的,連續的行資料。最初的時候一張表只有一個Region,當Region變得非常大的時候,Region就會從中間分裂成兩個基本等大的Region。

image-20190309213627971
在Hbase中,slave也被稱作RegionServer,每個RegionServer負責管理一些Region,同時一個Region只能屬於一個RegionServer。
Region分配
一個RegionServer可以服務一個或多個Region,每個Region在Region Server啟動的時候被分配。Master可以決定將一些Region從一個RegionServer中移動到令一個RegionServer裡面,以便更好的負載均衡。當某個RegionServer故障的時候,Master也可以將它的Region分配給其他的RegionServer。
Region與RegionServer之間的對映關係儲存在Zookeeper中的META表中,通過讀取META表,你就可以知道那個Region可以負責處理你的rowkey操作,其實這也代表著在HBase讀寫操作的時候是不用經過Master節點的,你可以之間聯絡RegionServer。
如圖,在客戶端進行scan的時候,它可以之間聯絡多個RegionServer處理當前的操作。

image-20190309214611246
Meta表是用來跟蹤Region的,它包含伺服器的名稱,Region的名稱,表名,還有Region的startkey。通過startkey的範圍,客戶端就可以定位到當前的key要去哪一個Region了。
客戶端在請求過META表之後,一般會將表快取起來,防止每次操作都去獲取。在Region進行分裂的時候,客戶端去RegionServer操作Region的時候回返回異常,然後客戶端會重新獲取最新的META表資訊。
客戶端API
Hbase的Java客戶端API有兩個主要的介面:
- HBaseAdmin: 建立,修改,刪除,更新表,可以在叢集中分配和不分配Region,合併Region,重新整理操作等,主要與Master節點打交道。
- HTable:客戶端用來與具體某個表的資料打交道,獲取,更新,刪除,增加表的資料,主要與Region Server用來打交道。
最後
通過上面介紹,可以知道HBase雖然是Master/Slave架構的,但是並不是每次操作都經過Master的,讀寫資料的時候HBase只需要直接聯絡RegionServer即可。這也是HBase可以“無限擴容”的原因。在吞吐量不夠的時候,通過增加RegionServer節點,可以增加吞吐量。