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

1、邏輯存儲模型
    HBase以表的形式存儲數據,表由行和列組成。列劃分爲若干個列族,服務器

    RowKey:Hbase使用Rowkey來惟一的區分某一行的數據。如圖中"rk001"
    列族:Hbase經過列族劃分數據的存儲,列族下面能夠包含任意多的列,實現靈活的數據存取。Hbase的列族不是越多越好,官方推薦的是列族最好小於或者等於3。咱們使用的場景通常是1個列族。如圖中的「CF1」列族,下面包含兩個列:"Name"和"Alias"。
    時間戳:TimeStamp對Hbase來講相當重要,由於它是實現Hbase多版本的關鍵。在Hbase中使用不一樣的timestame來標識相同rowkey行對應的不通版本的數據。
    Cell:HBase 中經過 rowkey 和 columns 肯定的爲一個存儲單元稱爲 cell。每一個 cell 都保存着同一份 數據的多個版本。版本經過時間戳來索引。架構

2、物理存儲模型負載均衡

在HBase中,數據以表的形式存儲,表由不少行組成,每一行由Row key(行鍵)以及一個或多個的列值組成。咱們能夠這麼想,當表有不少不少的Row時,咱們把這個表按某些規則(好比每500條)拆分紅不少部分,那麼拆分後的每一部分就是所謂的HRegion,這個HRegion做爲一個總體被HMaster分配到某一個RegionServer中。這裏能夠這樣理解,把HMaster想象成一個老大,他把HRegion給分配到某一個服務器上,這樣一來,一個表就被分紅多個HRegion並可能分配到了不一樣的RegionServer上。咱們剛說HRegion是一個總體,意思是他不能再繼續往下分割了,他必須在一個RegionServer上。ide

3、整體架構
    HBase的整體結構圖以下:
【HBase-2】HBase的原理和架構日誌

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

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

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有着本身的格式。

相關文章
相關標籤/搜索