天天看點

hbase 學習(十六)系統架構圖

hbase 系統架構圖

hbase 學習(十六)系統架構圖

<b>組成部件說明 </b>

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檔案系統中讀寫資料

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。使用者寫入資料的流程:

hbase 學習(十六)系統架構圖

client寫入 -&gt; 存入memstore,一直到memstore滿 -&gt; flush成一個storefile,直至增長到一定門檻值 -&gt; 觸發compact合并操作 -&gt; 多個storefile合并成一個storefile,同時進行版本合并和資料删除 -&gt; 當storefiles compact後,逐漸形成越來越大的storefile -&gt; 單個storefile大小超過一定門檻值後,觸發split操作,把目前region split成2個region,region會下線,新split出的2個孩子region會被hmaster配置設定到相應的hregionserver上,使得原先1個region的壓力得以分流到2個region上。

由此過程可知,hbase隻是增加資料,有所得更新和删除操作,都是在compact階段做的,是以,使用者寫操作隻需要進入到記憶體即可立即傳回,進而保證i/o高性能。

hlog  

<b>引入hlog原因: </b>  

在分布式系統環境中,無法避免系統出錯或者當機,一旦hregionserver意外退出,memstore中的記憶體資料就會丢失,引入hlog就是防止這種情況   

<b>工作機制:</b>   

每個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

<b></b>

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

<b>結束語:</b>這篇文章是我專門在網上弄下來的,算是hbase部分的終極篇吧,我的服務端的源碼系列也要基于這個順序來開展。

繼續閱讀