HBase 系統架構


HBase是Apache Hadoop的數據庫,能夠對大型數據提供隨機、實時的讀寫訪問。HBase的目標是存儲並處理大型的數據。HBase是一個開源的,分布式的,多版本的,面向列的存儲模型。它存儲的是松散型數據。

HBase特性:

1 高可靠性

2 高效性

3 面向列

4 可伸縮

5 可在廉價PC Server搭建大規模結構化存儲集群

HBase是Google BigTable的開源實現,其相互對應如下:

          Google            HBase
文件存儲系統      GFS              HDFS
海量數據處理      MapReduce Hadoop     MapReduce
協同服務管理    Chubby           Zookeeper

 

HBase關系圖:

HBase位於結構化存儲層,圍繞HBase,各部件對HBase的支持情況:
Hadoop部件            作用
HDFS              高可靠的底層存儲支持
MapReduce             高性能的計算能力
Zookeeper            穩定服務和failover機制
Pig&Hive             高層語言支持,便於數據統計
Sqoop              提供RDBMS數據導入,便於傳統數據庫向HBase遷移

訪問HBase的接口

方式            特點              場合
Native Java API      最常規和高效            Hadoop MapReduce Job並行處理HBase表數據
HBase Shell         最簡單接口             HBase管理使用
Thrift Gateway      利用Thrift序列化支持多種語言     異構系統在線訪問HBase表數據
Rest Gateway       解除語言限制            Rest風格Http API訪問
Pig            Pig Latin六十編程語言處理數據   數據統計
Hive            簡單,SqlLike

HBase 數據模型

組成部件說明:

Row Key:     Table主鍵 行鍵 Table中記錄按照Row Key排序
Timestamp:     每次對數據操作對應的時間戳,也即數據的version number
Column Family:  列簇,一個table在水平方向有一個或者多個列簇,列簇可由任意多個Column組成,列簇支持動態擴展,無須預定義數量及類型,二進制存儲,用戶需自行進行類型轉換

Table&Region

1. Table隨着記錄增多不斷變大,會自動分裂成多份Splits,成為Regions
2. 一個region由[startkey,endkey)表示
3. 不同region會被Master分配給相應的RegionServer進行管理

兩張特殊表:-ROOT- & .META.

.META.   記錄用戶表的Region信息,同時,.META.也可以有多個region
-ROOT-    記錄.META.表的Region信息,但是,-ROOT-只有一個region
Zookeeper中記錄了-ROOT-表的location
客戶端訪問數據的流程:
Client -> Zookeeper -> -ROOT- -> .META. -> 用戶數據表
多次網絡操作,不過client端有cache緩存

HBase 系統架構圖

組成部件說明
Client:
使用HBase RPC機制與HMaster和HRegionServer進行通信
Client與HMaster進行通信進行管理類操作
Client與HRegionServer進行數據讀寫類操作

Zookeeper:
Zookeeper Quorum存儲-ROOT-表地址、HMaster地址
HRegionServer把自己以Ephedral方式注冊到Zookeeper中,HMaster隨時感知各個HRegionServer的健康狀況
Zookeeper避免HMaster單點問題

HMaster:
HMaster沒有單點問題,HBase中可以啟動多個HMaster,通過Zookeeper的Master Election機制保證總有一個Master在運行
主要負責Table和Region的管理工作:
1 管理用戶對表的增刪改查操作
2 管理HRegionServer的負載均衡,調整Region分布
3 Region Split后,負責新Region的分布
4 在HRegionServer停機后,負責失效HRegionServer上Region遷移

HRegionServer:
HBase中最核心的模塊,主要負責響應用戶I/O請求,向HDFS文件系統中讀寫數據


HRegionServer管理一些列HRegion對象;
每個HRegion對應Table中一個Region,HRegion由多個HStore組成;
每個HStore對應Table中一個Column Family的存儲;
Column Family就是一個集中的存儲單元,故將具有相同IO特性的Column放在一個Column Family會更高效

HStore:
HBase存儲的核心。由MemStore和StoreFile組成。
MemStore是Sorted Memory Buffer。用戶寫入數據的流程:


Client寫入 -> 存入MemStore,一直到MemStore滿 -> Flush成一個StoreFile,直至增長到一定閾值 -> 出發Compact合並操作 -> 多個StoreFile合並成一個StoreFile,同時進行版本合並和數據刪除 -> 當StoreFiles Compact后,逐步形成越來越大的StoreFile -> 單個StoreFile大小超過一定閾值后,觸發Split操作,把當前Region Split成2個Region,Region會下線,新Split出的2個孩子Region會被HMaster分配到相應的HRegionServer 上,使得原先1個Region的壓力得以分流到2個Region上
由此過程可知,HBase只是增加數據,有所得更新和刪除操作,都是在Compact階段做的,所以,用戶寫操作只需要進入到內存即可立即返回,從而保證I/O高性能。

HLog
引入HLog原因:
在分布式系統環境中,無法避免系統出錯或者宕機,一旦HRegionServer以外退出,MemStore中的內存數據就會丟失,引入HLog就是防止這種情況
工作機制:
每 個HRegionServer中都會有一個HLog對象,HLog是一個實現Write Ahead Log的類,每次用戶操作寫入Memstore的同時,也會寫一份數據到HLog文件,HLog文件定期會滾動出新,並刪除舊的文件(已持久化到 StoreFile中的數據)。當HRegionServer意外終止后,HMaster會通過Zookeeper感知,HMaster首先處理遺留的 HLog文件,將不同region的log數據拆分,分別放到相應region目錄下,然后再將失效的region重新分配,領取到這些region的 HRegionServer在Load Region的過程中,會發現有歷史HLog需要處理,因此會Replay HLog中的數據到MemStore中,然后flush到StoreFiles,完成數據恢復。

HBase存儲格式
HBase中的所有數據文件都存儲在Hadoop HDFS文件系統上,格式主要有兩種:
1 HFile HBase中KeyValue數據的存儲格式,HFile是Hadoop的二進制格式文件,實際上StoreFile就是對HFile做了輕量級包裝,即StoreFile底層就是HFile
2 HLog File,HBase中WAL(Write Ahead Log) 的存儲格式,物理上是Hadoop的Sequence File

HFile


圖片解釋:
HFile文件不定長,長度固定的塊只有兩個:Trailer和FileInfo
Trailer中指針指向其他數據塊的起始點
File Info中記錄了文件的一些Meta信息,例如:AVG_KEY_LEN, AVG_VALUE_LEN, LAST_KEY, COMPARATOR, MAX_SEQ_ID_KEY等
Data Index和Meta Index塊記錄了每個Data塊和Meta塊的起始點
Data Block是HBase I/O的基本單元,為了提高效率,HRegionServer中有基於LRU的Block Cache機制
每個Data塊的大小可以在創建一個Table的時候通過參數指定,大號的Block有利於順序Scan,小號Block利於隨機查詢
每個Data塊除了開頭的Magic以外就是一個個KeyValue對拼接而成, Magic內容就是一些隨機數字,目的是防止數據損壞

HFile里面的每個KeyValue對就是一個簡單的byte數組。這個byte數組里面包含了很多項,並且有固定的結構。


KeyLength和ValueLength:兩個固定的長度,分別代表Key和Value的長度
Key部分:Row Length是固定長度的數值,表示RowKey的長度,Row 就是RowKey
Column Family Length是固定長度的數值,表示Family的長度
接着就是Column Family,再接着是Qualifier,然后是兩個固定長度的數值,表示Time Stamp和Key Type(Put/Delete)
Value部分沒有這么復雜的結構,就是純粹的二進制數據

HLog File


HLog文件就是一個普通的Hadoop Sequence File,Sequence File 的Key是HLogKey對象,HLogKey中記錄了寫入數據的歸屬信息,除了table和region名字外,同時還包括 sequence number和timestamp,timestamp是“寫入時間”,sequence number的起始值為0,或者是最近一次存入文件系統中sequence number。
HLog Sequece File的Value是HBase的KeyValue對象,即對應HFile中的KeyValue


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM