天天看點

Hbase的工作原理

HBase邏輯上的表可能會被劃分成多個HRegion,然後存儲到HRegion Server群中。HBase Master Server中存儲的是從資料到HRegion Server的映射。首先client通過hbase的rpc機制與hmaster和hregion server通信進行管理類的操作和資料的讀寫操作。HBase中所有的伺服器都是通過ZooKeeper來進行協調,HRegionServer也會把自己以Ephemeral方式注冊到 Zookeeper中,使得HMaster可以随時感覺到各個HRegionServer的健康狀态。此外,Zookeeper也避免了HMaster的單點問題。HMaster的主要任務就是要告訴每台HRegion Server它要維護那些HRegion。當一台新的HRegion Server登入到HMaster時,HMaster會告訴它等待配置設定資料。HRegion Server主要負責響應使用者I/O請求,向HDFS檔案系統中讀寫資料。HRegion Server内部管理了一系列HRegion對象,每個HRegion對應了Table中的一個Region,HRegion中由多個HStore組成。每個HStore對應了Table中的一個Column Family的存儲。HStore其中由兩部分組成,一部分是MemStore,一部分是StoreFiles。使用者寫入的資料首先會放入MemStore,當MemStore滿了以後會Flush成一個StoreFile,當StoreFile檔案數量增長到一定門檻值,會觸發Compact合并操作,将多個StoreFiles合并成一個StoreFile,合并過程中會進行版本合并和資料删除(是以可以看出HBase其實隻有增加資料,所有的更新和删除操作都是在後續的compact過程中進行的)。當StoreFiles Compact後,會逐漸形成越來越大的StoreFile,當單個StoreFile大小超過一定門檻值後,會觸發Split操作,同時把目前Region Split成2個Region,父Region會下線,新Split出的2個孩子Region會被HMaster配置設定到相應的HRegionServer 上,使得原先1個Region的壓力得以分流到2個Region上。一旦HRegion Server意外退出,MemStore中的記憶體資料将會丢失,這就需要引入HLog了,每個HRegion Server中都有一個HLog對象,在每次使用者操作寫入MemStore的同時,也會寫一份資料到HLog檔案中,HLog檔案定期會滾動出新的,并删除舊的檔案,當HRegion Server意外終止後,HMaster會通過Zookeeper感覺到,HMaster首先會處理遺留的 HLog檔案,将其中不同Region的Log資料進行拆分,分别放到相應region的目錄下,然後再将失效的region重新配置設定,領取到這些region的HRegion Server在Load Region的過程中,會發現有曆史HLog需要處理,是以會Replay HLog中的資料到MemStore中,然後flush到StoreFiles,完成資料恢複。