1.Region定位
Region按大小分割,每個(gè)表以開始只有一個(gè)region,隨著數(shù)據(jù)不斷地插入表,region不斷增大,當(dāng)增大到一定閾值時(shí),HBase會(huì)根據(jù)一定規(guī)則將表進(jìn)行水平拆分,形成兩個(gè)Region

Region是HBase中分布式存儲(chǔ)和負(fù)載均衡的最小單元,最小單元就是表示不同的region可以分布在不同的regionServer上,但一個(gè)region不會(huì)拆分到多個(gè)server
1.1 META表--記錄用戶表和管理情況
①M(fèi)ETA表:記錄了各個(gè)RegionServer所管理的表和region信息。(元數(shù)據(jù)表)
②與一般HBase表結(jié)構(gòu) 一樣,采用鍵值對(duì)和面向列的存儲(chǔ)
③META表數(shù)據(jù)過(guò)多,也會(huì)進(jìn)行自動(dòng)分區(qū)



1.2 數(shù)據(jù)存儲(chǔ)與讀取-Store
Store存儲(chǔ)是HBase存儲(chǔ)的核心
MemStore:內(nèi)存寫緩存
· HBase將最近接收到的數(shù)據(jù)緩存在內(nèi)存中(in Memstore),在持久化到HDFS之前完成排序,然后再快速的順序?qū)懭際DFS
· 緩存最近增加的頻繁使用的數(shù)據(jù),提高數(shù)據(jù)讀取的速度
· 持久化寫入之前,根據(jù)配置優(yōu)化表數(shù)據(jù)
StoreFile:當(dāng)MemStore滿了以后會(huì)Flush成一個(gè)StoreFile(底層實(shí)現(xiàn)是HFile),
· 當(dāng)StoreFile文件數(shù)量增長(zhǎng)到一定閾值,會(huì)觸發(fā)Compaction合并操作
· Memstore的數(shù)據(jù)插入是有序的,因此每個(gè)storefile最終會(huì)合并成一個(gè)有序的大的storefile。

HBase寫流程
1.客戶端首先訪問zookeeper,從meta表得到寫入數(shù)據(jù)對(duì)應(yīng)的region信息和相應(yīng)的region服務(wù)器
2.MemStore達(dá)到一個(gè)閾值后則把數(shù)據(jù)刷成一個(gè)StoreFile文件
3.當(dāng)Storefile文件達(dá)到一定的數(shù)量后,會(huì)觸發(fā)Compact合并操作,合并為一個(gè)大的StoreFile,最終以Hfile的形式存于HDFS中
4.當(dāng)Storefile大小超過(guò)一定閾值后,會(huì)把當(dāng)前的Region分割為兩個(gè),并由Master分配到相應(yīng)的RegionServer,實(shí)現(xiàn)負(fù)載均衡
HBase讀文件流程
1.客戶端先訪問zookeeper,從meta表讀取Region的信息對(duì)應(yīng)的服務(wù)器
2.客戶端向?qū)?yīng)Region服務(wù)器發(fā)送讀取數(shù)據(jù)的請(qǐng)求,Region接收請(qǐng)求后,先從MemStore找數(shù)據(jù),如果沒有,再到StoreFile讀取,然后將數(shù)據(jù)返回給客戶端
? ? ? ? · get操作:先定位到鍵值對(duì)所在的分區(qū),再并行的查詢?cè)摲謪^(qū)中所有storefile中是否由指定行鍵的鍵值對(duì),由于storefile是排序過(guò)的,因此這種并行查詢可以很快得到結(jié)果
? ? ? ? · scan操作:根據(jù)限定條件,比如列族和行鍵的范圍確定需要掃描的分區(qū),并在這些分區(qū)的storefile中進(jìn)行分布式掃描和過(guò)濾。
1.3? WAL機(jī)制
Hlog:預(yù)寫日志(Write Ahead Log)文件,當(dāng)數(shù)據(jù)寫入memstore之前,RegionServer會(huì)將數(shù)據(jù)寫入到Hlog中

· HLog寫入到HDFS中,記錄所有的變更;
· 鍵值對(duì)寫入HLog時(shí),會(huì)寫入所屬的表和分區(qū),以及記錄序號(hào)和時(shí)間戳
· 數(shù)據(jù)持久化操作之后,RegionServer會(huì)將不需要的HLog清除掉,并將這一清除事件寫入Zookeeper。
· 以追加文件的方式將不同region的日志混在一起,減少磁盤尋址次數(shù),提高對(duì)table的寫性能;
· 如果一臺(tái)regionServer下線,為了恢復(fù)其上的region,需要將HLog進(jìn)行拆分,然后分發(fā)到其他regionserver上進(jìn)行恢復(fù)