HBase之功能細節

fmms 12年前發布 | 25K 次閱讀 HBase 分布式/云計算/大數據

1.Region定位

在Google的BigTable體系中,tablet的存儲地址通過3層目錄結構來定位的,如圖所示:

注:tablet等同與HBase中的Region

HBase之功能細節

圖釋說明:

(1)METADATATable

METADATATable是系統預定義的Table,當用戶自定義表格被拆分成多個tablet之后,METADATA Table用來存儲這些tablet的地址,在目錄層級中處于第3層

(2)Root tablet

METADATA表格在分布式存儲過程中也會被拆分成多個tablet,其中第一個tablet比較特殊,用來存儲其他tablet的地址,稱之為Roottablet,在目錄層級中處于第2層

(3)Chunbby file

用來存儲Roottablet的地址,在目錄結構中處于頂層

這樣,客戶端可通過Chubby file遍歷到任何tablet的地址

在HBase中:

Region的概念等同于tablet

.META.表格等同于METADATATable

而-ROOT-表格等同于Chunbby file

這樣,客戶端可通過-ROOT- Table遍歷到任何Region的地址,并把這些地址在本地進行緩存,以加快下次查詢效率

2.Region分配

在HBase中,MasterServer負責將Region分配給RegionServer

首先,看一下BigTable中tablet如何分配:

當master機器啟動的時候,它會處理如下事情:

(1)首先在Chunbby中獲取masterlock,在分布式部署中,系統中只能有一個master處于運行狀態,當其獲得master鎖之后,其他的master機器將會進入等待狀態

(2)master會掃描Chunbby目錄,以獲取處于運行狀態的table server(RegionServer)

(3)master會和每一臺tabletserver進行通信,來記錄哪些tablet已經成功分配

(4)master會掃描METADATA表格,如果發現有tablet不在已分配記錄中,則將其分配到合適的tablet server

在HBase中,是通過如下API來完成Region的分配過程:

(1)Master在啟動的時候,會去調用AssignmentManager類

(2)AssignmentManager通過查找.META.表格來獲取Region信息

(3)如果Region尚未分配,則調用LoadBalancerFactory將其分配,默認的分配器(DefaultLoadBalancer)會將該Region分配給一個隨機的RegionServer

(4)更新.META.表格信息

3.數據存儲

在HDFS中,HBase的數據存儲呈如下目錄結構:

           |__

                        |__

                                   |__

                                                         |__

StoreFile是基于Google的SSTable來實現的,每個SSTable相當于一個持久存儲的、多維的、可序列化Map,Map的key和 value都是可解釋型字符數組,可從中提煉出具體的rowKey、timestamp、columnKey和columnValue等信息。

在物理存儲上SSTable由多個Block塊組成,SSTable記錄了每個Block快的索引位置,并且在被訪問的時候將這些塊索引加載到內存,以便系統快速定位Block塊所在磁盤位置。

4.Region Serving

在Google的BigTable體系中,tablet會持久化存儲到GFS文件系統中,如圖:

HBase之功能細節

圖釋說明:

(1)當有寫操作到達時,系統首先會將信息寫入到tablet log,然后把所提交的數據存儲在memtable上,這樣,tablet log就記錄了每次寫操作的日志信息以及操作的數據信息,當需要執行undo/redo操作式,可通過遍歷查找該tablet log來實現撤銷/恢復的功能。

寫操作提交之后,數據并沒有持久化存儲到本地硬盤上,而是放到了memtable里,memtable是存儲在內存當中的,當其大小達到一定上限之后,才持久化存儲到SSTable File中去,隨后進行數據的壓縮處理(參考5-數據壓縮)

(2)因為memtable也存儲了相關的數據信息,而且是寫操作提交后的最新信息,所以查詢操作的數據來源有兩方面,一方面是SSTable Files,另一方面是memtable。

(3)tablet恢復

當tablet數據需要恢復到歷史版本時,tablet server首先會查詢METADATA表格,從中獲取該tablet的元數據信息,包括:

        存儲該tablet的SSTable文件

        Tablet的恢復點(存儲在tabletlog中)

隨后,tablet server會把要恢復的相關記錄加載到內存,根據tablet log所記錄的操作日志來重新構建memtable

5.數據壓縮

數據壓縮主要有3中方式,分別是:

(1)Minor compaction:

當memtable的大小達到一定上限之后便會被系統凍結。此時,一個新的memtable將會創建,而被凍結的memtable將會持久化儲存到SSTable文件中去。

(2)Merging compaction:

每一個minor compaction都會生成一個SSTable文件,當minor compaction操作較多時, SSTable文件將會包含很多實體的歷史信息,造成數據冗余,解決辦法是系統會定期執行merging compaction,將相關SSTable存儲的實體進行合并,以保證實體信息處于最新版本,為查詢提供方便。

(3)Major compaction:

將所有的SSTable合并成一個SSTable稱之為major compaction,Major compaction通常用來回收邏輯上已被刪除的數據,以節省磁盤空間。

 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!