1. 程式人生 > >【HBase-2】HBase的原理和架構

【HBase-2】HBase的原理和架構

一、邏輯儲存模型
    HBase以表的形式儲存資料,表由行和列組成。列劃分為若干個列族,

    RowKey:Hbase使用Rowkey來唯一的區分某一行的資料。如圖中"rk001"
    列族:Hbase通過列族劃分資料的儲存,列族下面可以包含任意多的列,實現靈活的資料存取。Hbase的列族不是越多越好,官方推薦的是列族最好小於或者等於3。我們使用的場景一般是1個列族。如圖中的“CF1”列族,下面包含兩個列:"Name"和"Alias"。
    時間戳:TimeStamp對Hbase來說至關重要,因為它是實現Hbase多版本的關鍵。在Hbase中使用不同的timestame來標識相同rowkey行對應的不通版本的資料。
    Cell:HBase 中通過 rowkey 和 columns 確定的為一個儲存單元稱為 cell。每個 cell 都儲存著同一份 資料的多個版本。版本通過時間戳來索引。

二、物理儲存模型

在HBase中,資料以表的形式儲存,表由很多行組成,每一行由Row key(行鍵)以及一個或多個的列值組成。我們可以這麼想,當表有很多很多的Row時,我們把這個表按某些規則(比如每500條)拆分成很多部分,那麼拆分後的每一部分就是所謂的HRegion,這個HRegion作為一個整體被HMaster分配到某一個RegionServer中。這裡可以這樣理解,把HMaster想象成一個老大,他把HRegion給分配到某一個伺服器上,這樣一來,一個表就被分成多個HRegion並可能分配到了不同的RegionServer上。我們剛說HRegion是一個整體,意思是他不能再繼續往下分割了,他必須在一個RegionServer上。

三、總體架構
    HBase的總體結構圖如下:
【HBase-2】HBase的原理和架構

    包括了HMaster、HRegionSever、HRegion、HLog、Store、MemStore、StoreFile、HFile等。

HBase底層依賴HDFS,通過DFS Cilent進行HDFS操作。
HMaster負責把HRegion分配給HRegionServer,每一個HRegionServer可以包含多個HRegion,多個HRegion共享HLog,HLog用來做災難恢復。
每一個HRegion由一個或多個Store組成,一個Store對應表的一個列族,每個Store中包含與其對應的MemStore以及一個或多個StoreFile(是實際資料儲存檔案HFile的輕量級封裝),MemStore是在記憶體中的,儲存了修改的資料,MemStore中的資料寫到檔案中就是StoreFile。

3.1 HMaster
    HMaster的主要功能有:
①把HRegion分配到某一個RegionServer。
②有RegionServer宕機了,HMaster可以把這臺機器上的Region遷移到active的RegionServer上。
③對HRegionServer進行負載均衡。
④通過HDFS的dfs client介面回收垃圾檔案(無效日誌等)
注:HMaster沒有單點問題,HBase中可以啟動多個HMaster,通過Zookeeper的Master Election機制保證總有一個Master執行。

3.2 HRegionServer
    ①維護HMaster分配給它的HRegion,處理對這些HRegion的IO請求,也就是說客戶端直接和HRegionServer打交道。(從圖中也能看出來)
    ②負責切分正在執行過程中變得過大的HRegion

3.3 HRegion
    下面我們看看HRegion的結構:

    每個HRegion由多個Store構成,每個Store儲存一個列族(Columns Family),表有幾個列族,則有幾個Store,每個Store由一個MemStore和多個StoreFile組成,MemStore是Store在記憶體中的內容,寫到檔案後就是StoreFile。StoreFile底層是以HFile的格式儲存。

3.4 HLog
    HLog(WAL log):WAL意為write ahead log(預寫日誌),用來做災難恢復使用,HLog記錄資料的變更,包括序列號和實際資料,所以一旦region server 宕機,就可以從log中回滾還沒有持久化的資料。

3.5 HFile
    HBase的資料最終是以HFile的形式儲存在HDFS中的,HBase中HFile有著自己的格式。