HBase學習之路——HBase底層機制簡單總結

前言

經過前面的學習瞭解,我們可以明確HBase是爲了適應大容量數據交互和多類型數據存儲而產生的列式存儲數據庫,數據類型爲key-value,所有的數據屬性都表現在列族上,可以說列族是HBase表中的最關鍵數據模型。

一般在完全分佈式集羣中,集羣中的slave服務器一般爲HBase存儲數據的RegionServer,每一個RegionServer可以有多個Region,Region中存儲多行的數據,(master與RegionServer間的管理調用通過ZooKeeper集羣管理器進行)數據最終存儲在HDFS中。

在HBase中,基本的數據模型是表table,行鍵rowkey,列族column family,列column qualifier,單元格cell,時間戳timestamp,版本號version(一般不特別說明的話,version爲數據存儲的時間,如果特別指定version,則爲當前數據的版本號。在HDFS中單元格的數據是按照version排序的,而version是以字典順序爲依據進行排序,也即version1在version1和version2間;行鍵同理,row11在row1和row2之間)

存儲數據機制

此處參考《HBase不睡覺書》,按照數據存儲的過程來講解HBase存儲數據的架構機制。

1. 宏觀架構

如上圖所示,HBase中的最重要的就是Master和RegionServer,其中一半Master爲1-2個(2個一般是使用HA模式,一個作爲候補機),多個RegionServer,一般一個slave爲一個RegionServer,一個RegionServer上一般有多個Region,Region中存儲一行行的數據,而數據最終存儲在HDFS中。

HBase中有自帶的ZooKeeper,目的在於管理master和regionserver間的任務調度,當需要進行表操作時,master在zookeeper中註冊生成一個session,zookeeper檢查regionserver中健康的空閒的選擇master表操作的對象,同時監控表操作的整個過程。當任務結束或者任務宕機生成的session會自動被刪除,進行下一步操作(zookeeper等待下一次註冊/重新選擇健康的regionserver並重復原過程)。

在客戶端和服務端的交互中,客戶端發出數據操作請求,請求發送給zookeeper,zookeeper根據情況處理任務。

需要注意的是,和一般的產品不同,HBase集羣中,master宕機並不會造成巨大的損失,因爲regionserver依舊可以工作,因爲master主要是表刪除新建數據需要,普通的數據查詢更新是直接在regionserver上進行的。這點設計也是爲hbase高效工作和宕機處理提供很好的緩衝時間。但如果將zookeeper關掉,就不能讀數據了,因爲讀取數據所需要的元數據表hbase:meta存儲在zookeeper上。

2. RegionServer

在RegionServer中很重要的也是設計的特別棒的一個產品就是WAL。Write-Ahead-Log,預寫日誌,顧名思義。當數據到達RegionServer時,先寫入WAL,之後會先存於Region中的MetaStore進行排序,此處爲內存存儲,當內存容量到達一個閥值時,會根據LSM算法刷寫(flush)到HFile中。在這個過程中,如果服務器宕機或者其他事件,數據丟失了,可以及時從WAL日誌中找回並繼續進行寫操作從而恢復數據,WAL是一個保險機制。更細一步講,WAL是一個環狀的滾動日誌結構,寫入效率很高,並且可保證空間不會持續變大。

在Region中,都有起始rowkey和終止rowkey,代表其存儲的row範圍,可存儲多個列族,這也體現了HBase數據表示行分散的,row間沒啥聯繫,而一般一個store存儲一個列族。

WAL是存儲在HDFS上的,MemStore是存儲在內存中的,HFile是存儲在HDFS上的。之所以最終存儲HDFS上的數據是從MemStore中來的,而非一開始寫入的WAL,是因爲HDFS只支持創建、追加和刪除,不支持修改,而對於一個數據庫而言,順序存儲是一件非常重要的事,所以就提前在進入HDFS之前在MemStore中排完序生成LSM樹(Log Structured Merge Tree,可以提高寫性能,適用於寫多讀少的場景),每次刷寫生成一個新的HFile,存儲在HDFS上,實現HDFS中表數據按rowkey有序存儲。由此也可以知道MemStore存在的意義是維持數據按照rowkey順序排列,而不是做一個緩存。

在讀取的過程中,如果直接讀內存的話過於低效率,所以又設計了一個緩衝區BlockCache,先在BlockStore中找,找不到去MemStore,再找不到去存於磁盤的HDFS上尋找。特別需要注意的是,一個RegionServer只有一個BlockCache

3. HFile

HFile是數據存儲的 實際載體,我們創建的表、列等數據都最終存儲在HFile中,HFile是有一個個的塊組成的,一個塊的默認大小爲64KB,是在列族上BLOCKSIZE屬性定義的。

Data爲數據塊,每個HFile中有多個Data塊,存儲HBase表中的數據。

Meta爲元數據塊,只有在HFile文件關閉的時候纔會寫入,存儲了該HFile文件的元數據信息。

FileInfo是文件信息,只有在HFile文件關閉時寫入,存儲文件的信息例如最後一個Key等信息。

DataIndex存儲Data索引信息,也即Data塊的偏移值offset,有Data纔會有DataIndex

MetaIndex存儲Meta索引信息,有Meta纔會有MetaIndex

Trailer存儲了FileInfo、DataIndex、MetaIndex塊的偏移值,是HFile中必需的

4. Data

 

BlockType

 

Cell(KeyValue)

 

Cell

 

Cell

 

……

 

Data塊中先有的是塊類型BlockType,後面存儲很多的KeyValue鍵值對,也即Hbase數據表中的單元格的實現類,需要了解的是,Cell是一個接口,KeyValue是其實現類。

對於Data中存儲的是一個列族中某一行的某一單元格的數據,BlockType爲單元格數據的屬性,每一個Cell爲一個version的數據。所以HFile中的Data爲一個或多個row的所有單元格的數據。

5. Key-Value

 

Key Len

 

Value Len

 

Row Len

 

Row

 

CF Len

 

CF

 

Col

 

TimeStamp

 

Key Type

 

Value

KeyValue中是存儲數據的Value,是一個Cell下表示一個Verison的Value值,其餘塊是這個Value相關的信息,例如列族信息(長度、名字),列信息(名字),行信息(行長度、行名字),key信息(類型、長度),時間戳等。

至此,HBase的存儲結構由宏觀到不可再分割的KeyValue結束,完美~\(≧▽≦)/~

6. 數據寫入過程

在總結完HBase數據存儲結構後,來寫一個數據寫入過程具體體會HBase驚豔的存儲結構。

需要注意的是,存於WAL的數據是不能直接讀取和使用的。HFile是真正數據最終存儲的位置,是持久化寫入磁盤中的,即使宕機也不會丟失數據的。

7. 數據讀出過程

在前面也提到過,讀取數據會先從BlockCache中查詢,如果查不到,會在MemStore和HFile中掃描查詢。HBase支持Scan操作,在Scan掃描時會創建StoreScanner實例,會將MemStore和HFile結合起來掃描,的那個StoreScanner打開時會先定位於一個STARTROW上,然後按row順序掃描直到找到目標數據。Scan會把所有符合條件的StoreScanner掃描之後會把目標數據返回給Client,同時將Block塊緩存到BlockCache中去。

拓展補充

HBase不支持表間關聯,不支持Windows系統,支持ACID(Atomicity原子性、Consistency一致性、Isolation隔離性、Durability持久性)。在HBase中,表命名空間Namespace主要是爲了把多個屬於相同業務領域的表分成一個組,創建使用create 'mytable:table1', 'mycf1'   需要注意的是在HBase中創建新表,至少需要跟一個列族

如果之前接觸過數據庫表的設計的話,我們會有一個好的認知,數據不需要的時候不會直接刪除,而是借用某一個boolean數據的屬性值將其禁止掉即可,以避免因爲表間緊密的關聯刪除數據引起不可估計的蝴蝶效應。那麼在HBase中也是有這樣的機制的,表現在數據的刪除和修改,一般來講新增一個數據那在HDFS上對應新增一個數據無可反駁。Hbase在數據修改和刪除也是在HDFS上新增一條數據,修改時新增的數據只是版本號比修改前的大而已,刪除時HDFS還是新增一個數據,只是沒有Value,類型爲DELETE,這樣的數據也被稱爲Tombstone墓碑標記。真正刪除在於HBase每隔一段時間的合併操作Compaction,在合併中將有用的數據重新記錄,剩下的真正刪除掉,這也印證了HDFS上只能新增更新修改,不能刪除。

總結

學習當循序漸進,學會總結,相信水滴石穿,加油↖(^ω^)↗

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章