天天看點

HBase系統架構

總體架構:

HBase系統架構

Client: Client使用HBase RPC機制與HMaster、HRegionServer進行通信。 與HMaster通信進行管理類操作,與HRegionServer通信進行資料讀寫類操作

Zookeeper: Zookeeper Quorum(仲裁 ),存儲-ROOT-表位址、HMaster位址 HRegionServer把自己注冊到Zookeeper中,HMaster随時感覺各個HRegionServer的健康狀況 Zookeeper避免HMaster單點問題

HMaster: HBase中可以啟動多個HMaster,通過Zookeeper的Master Election機制保證總有一個Master在運作。( HMaster沒有單點問題 ) 主要負責Table和Region的管理工作:

1 管理使用者對表的增删改查操作

2 管理HRegionServer的負載均衡,調整Region分布

3 Region Split後,負責新Region的分布

4 在HRegionServer停機後,負責失效HRegionServer上Region遷移

HRegionServer:( HBase中最核心的子產品) 主要負責響應使用者I/O請求,向HDFS檔案系統中讀寫資料

HBase系統架構

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。(sort:分類,類别) 使用者寫入資料的流程:

HBase系統架構

Client寫入 -> 存入MemStore,一直到MemStore滿(預設64M) -> Flush成一個StoreFile,直至增長到一定門檻值(預設大于3) -> 促發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

HBase系統架構

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數組裡面包含了很多項,并且有固定的結構。

HBase系統架構

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

HBase系統架構

HLog檔案就是一個普通的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。

繼續閱讀