HRegionServer詳解

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

HRegionServer內部管理了一系列HRegion對象,每一個HRegion對應了Table中的一個Region,HRegion中由多個HStore組成。每一個HStore對應了Table中的一個Column Family的存儲,能夠看出每一個Column Family其實就是一個集中的存儲單元,所以最好將具有共同IO特性的column放在一個Column Family中,這樣最高效。 性能

HStore存儲是HBase存儲的核心了,其中由兩部分組成,一部分是MemStore,一部分是StoreFiles。MemStore是Sorted Memory Buffer,用戶寫入的數據首先會放入MemStore,當MemStore滿了之後會Flush成一個StoreFile(底層實現是HFile),當StoreFile文件數量增加到必定閾值,會觸發Compact合併操做,將多個StoreFiles合併成一個StoreFile,合併過程當中會進行版本合併和數據刪除,所以能夠看出HBase其實只有增長數據,全部的更新和刪除操做都是在後續的compact過程當中進行的,這使得用戶的寫操做只要進入內存中就能夠當即返回,保證了HBase I/O的高性能。當StoreFiles Compact後,會逐步造成愈來愈大的StoreFile,當單個StoreFile大小超過必定閾值後,會觸發Split操做,同時把當前Region Split成2個Region,父Region會下線,新Split出的2個孩子Region會被HMaster分配到相應的HRegionServer上,使得原先1個Region的壓力得以分流到2個Region上。下圖描述了Compaction和Split的過程: spa

在理解了上述HStore的基本原理後,還必須瞭解一下HLog的功能,由於上述的HStore在系統正常工做的前提下是沒有問題的,可是在分佈式系統環境中,沒法避免系統出錯或者宕機,所以一旦HRegionServer意外退出,MemStore中的內存數據將會丟失,這就須要引入HLog了。每一個HRegionServer中都有一個HLog對象,HLog是一個實現Write Ahead Log的類,在每次用戶操做寫入MemStore的同時,也會寫一份數據到HLog文件中(HLog文件格式見後續),HLog文件按期會滾動出新的,並刪除舊的文件(已持久化到StoreFile中的數據)。當HRegionServer意外終止後,HMaster會經過Zookeeper感知到,HMaster首先會處理遺留的 HLog文件,將其中不一樣Region的Log數據進行拆分,分別放到相應region的目錄下,而後再將失效的region從新分配,領取 到這些region的HRegionServer在Load Region的過程當中,會發現有歷史HLog須要處理,所以會Replay HLog中的數據到MemStore中,而後flush到StoreFiles,完成數據恢復。 對象

相關文章
相關標籤/搜索