HBase-整體架構(gòu)及讀寫原理
1.HBase架構(gòu)圖

上圖標(biāo)明了HBase各個(gè)組件及其內(nèi)在聯(lián)系,主要有以下幾部分
HMaster:HBase的管理節(jié)點(diǎn),可以為多個(gè),實(shí)現(xiàn)HA,負(fù)責(zé)將region分配給HRegionServer,協(xié)調(diào)RegionServer的負(fù)載并維護(hù)集群的狀態(tài),維護(hù)元數(shù)據(jù),不參與數(shù)據(jù)的輸入輸出。
HRegionServer:HBase的工作節(jié)點(diǎn),主要作用為依托ZookeeperWatcher進(jìn)行分布式信息共享與任務(wù)協(xié)調(diào);Region的管理;WAL(Write-Ahead-Log)管理;Metrics
zookeeper:zk的本質(zhì)是注冊(cè)中心,集成在HBase內(nèi)部負(fù)責(zé)以下任務(wù),hbase regionserver 向zookeeper注冊(cè),提供hbase regionserver狀態(tài)信息(是否在線);hmaster啟動(dòng)時(shí)候會(huì)將hbase 系統(tǒng)表-ROOT- 加載到 zookeeper cluster,通過zookeeper cluster可以獲取當(dāng)前系統(tǒng)表.META.的存儲(chǔ)所對(duì)應(yīng)的regionserver信息;
client:hbase的客戶端,可以使用第三方封裝好的client。也可以使用hbase自帶的client
HDFS:HBase的底層存儲(chǔ)系統(tǒng)。
2.HBase寫入為什么那么快?
HBase寫入優(yōu)先,它并不會(huì)直接寫入磁盤,而是寫入MemStore,待MemStore達(dá)到閾值,再異步刷入文件形成一個(gè)StoreFile。多個(gè)小的StoreFile會(huì)合并成一個(gè)大的StoreFile。當(dāng)大的StoreFile達(dá)到閾值,就會(huì)觸發(fā)split,將當(dāng)前的Region分割成兩個(gè)子的Region并被HMaster分配到不同的RegionServer上。整個(gè)寫入過程由于全內(nèi)存操作,所以很快。
3.HBase讀取為什么那么快?
首先看一下HBase讀取數(shù)據(jù)的大致流程

尋址流程
client–>Zookeeper–>ROOT表–>META表–>RegionServer–>Region–>client
具體流程
先到zk找到root表的RegionServer(root表的地址);
到root表中找到meta表的RegionServer(meta表的地址);root表的region只會(huì)有一個(gè),meta表的region會(huì)有多個(gè);為了加快訪問速度meta表的數(shù)據(jù)會(huì)被緩存到client且不會(huì)主動(dòng)過期。在應(yīng)用中就有主動(dòng)flush client cache的操作;
到meta表中找到對(duì)應(yīng)數(shù)據(jù)的RegionServer;
到數(shù)據(jù)的RegionServer中找到對(duì)應(yīng)的Region;
先到BlockCache查找,找不到再到MemStore查找,再找不到就到StoreFile中查找,然后緩存到BlockCache中;BlockCache負(fù)責(zé)讀,MemStore負(fù)責(zé)寫,這種讀寫分離的設(shè)計(jì)是HBase寫和讀都很快的基礎(chǔ)。為了加快查詢,在StoreFile中使用了布隆過濾器(LSM樹的優(yōu)化方式)。HBase只是增加數(shù)據(jù)(因?yàn)镠File是只讀的),更新和刪除數(shù)據(jù)都是在合并(Compact)階段完成的。
4.HBase宕機(jī)如何處理?
宕機(jī)分為 HMaster 宕機(jī)和 HRegisoner 宕機(jī),如果是HRegionServer宕機(jī), HMaster 會(huì)將其所管理的region重新分布到其他活動(dòng)的RegionServer上,由于數(shù)據(jù)和日志都持久在 HDFS中,該操作不會(huì)導(dǎo)致數(shù)據(jù)丟失。所以數(shù)據(jù)的一致性和安全性是有保障的。如果是HMaster宕機(jī), HMaster沒有單點(diǎn)問題, HBase中可以啟動(dòng)多個(gè)HMaster,通過Zookeeper 的 Master Election機(jī)制保證總有一個(gè)Master運(yùn)行。即 ZooKeeper 會(huì)保證總會(huì)有一個(gè) HMaster 在對(duì)外提供服務(wù)。5.HBase中compact用途是什么,什么時(shí)候觸發(fā),分為哪兩種?
用途:合并文件;清除過期,多余的版本;提高讀寫文件的效率;
觸發(fā):store的storeFile達(dá)到一定閾值后,就會(huì)進(jìn)行compact。
分類:
minor:合并部分文件;不做任何刪除數(shù)據(jù)、多版本數(shù)據(jù)的清理工作;
major:對(duì)一個(gè)store下的所有storefile執(zhí)行合并,最終合并成一個(gè)文件,多余版本會(huì)在這時(shí)清理;更新、刪除也在這時(shí)進(jìn)行;
