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ù)過多,也會(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大小超過一定閾值后荐捻,會(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是排序過的,因此這種并行查詢可以很快得到結(jié)果
? ? ? ? · scan操作:根據(jù)限定條件斯稳,比如列族和行鍵的范圍確定需要掃描的分區(qū)海铆,并在這些分區(qū)的storefile中進(jìn)行分布式掃描和過濾。
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ù)