hbase 架構和存儲

HBase 系統架構

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

HBase特性:web

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 系統架構圖

HBase中的每張表都經過行鍵按照必定的範圍被分割成多個子表(HRegion),默認一個HRegion超過256M就要被分割成兩個,由HRegionServer管理,管理哪些HRegion由HMaster分配。
HRegionServer存取一個子表時,會建立一個HRegion對象,而後對錶的每一個列族(Column Family)建立一個Store實例,每一個Store都會有0個或多個StoreFile與之對應,每一個StoreFile都會對應一個HFile, HFile就是實際的存儲文件。所以,一個HRegion有多少個列族就有多少個Store。
另外,每一個HRegion還擁有一個MemStore實例。
一個HRegionServer只對應一個HLog,也就是說同個HRegionServer中的HRegion共享一個HLog

組成部件說明
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是基於BigTable的面向列的分佈式存儲系統,其存儲設計是基於Memtable / SSTable設計的,主要分爲兩部分,一部分爲內存中的MemStore (Memtable),另一部分爲磁盤(這裏是HDFS)上的HFile (SSTable)。還有就是存儲WAL的log,主要實現類爲HLog.

1 本質上MemStore就是一個內存裏放着一個保存KEY/VALUE的MAP,當MemStore(默認64MB)寫滿以後,會開始刷磁盤操做。

2 HFile HBase中KeyValue數據的存儲格式,HFile是Hadoop的二進制格式文件,實際上StoreFile就是對HFile作了輕量級包裝,即StoreFile底層就是HFile
3 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

相關文章
相關標籤/搜索