要理解讀寫流程异希,先要清除hbase的架構(gòu)圖思恐。以0.96版本以下的三層架構(gòu)為例:
hbase是主從架構(gòu)酝豪,主節(jié)點(diǎn)是HMaster,從節(jié)點(diǎn)是HRegionServer嗜暴。
HMaster:負(fù)責(zé)regionserver的運(yùn)行狀態(tài)和region負(fù)載均衡凸克。
HRegionServer:負(fù)責(zé)存儲(chǔ)表格,以及響應(yīng)client的連接闷沥。包含一個(gè)HLog和多個(gè)HRegion萎战。
zk負(fù)責(zé)保證HMaster的高可用和region server的注冊(cè)。
-----------------------------------------------------------------------------------------------------------------------------------------------
1舆逃、hbase的讀請(qǐng)求流程
Ⅰ從zk中獲取regionserver的meta信息蚂维。
Ⅱ通過(guò)root表,根據(jù)meta信息找到對(duì)應(yīng)的regioonserver位置信息
Ⅲ找到對(duì)應(yīng)的regionserver路狮,獲取table的meta信息
Ⅳ通過(guò)table的meta信息虫啥,找到實(shí)際存儲(chǔ)table的regionserver
Ⅴ客戶端直接連接表所在的regionserver,獲取數(shù)據(jù)
--注:為了讓客戶端找到包含特定主鍵的region奄妨,HBase提供了兩張?zhí)厥獾哪夸洷硗孔眩?root和.meta。root表用來(lái)查詢所有meta表中的region位置砸抛。hbase的設(shè)計(jì)中只有一個(gè)root region评雌,即root region從不進(jìn)行拆分树枫。從而保證類似于B+樹(shù)的三層查找結(jié)構(gòu)。第一層是ZK中包含root region的節(jié)點(diǎn)柳骄,第二層是從root中查找對(duì)應(yīng)meta region的位置团赏,第三層是從meta表中查找用戶表對(duì)應(yīng)的region的位置信息。
2耐薯、hbase的寫請(qǐng)求過(guò)程?
1丝里、client先從緩存中定位region曲初,如果沒(méi)有緩存則訪問(wèn)zk,找到最先寫入的region信息杯聚。
2臼婆、將更新寫到WAL中。為了防止發(fā)生數(shù)據(jù)丟失幌绍。
3颁褂、將數(shù)據(jù)寫入到memstore中
4、數(shù)據(jù)達(dá)到閾值(默認(rèn)128m)會(huì)觸發(fā)flush操作傀广,生成多個(gè)storefile文件颁独。
5、當(dāng)storefile文件過(guò)多伪冰,會(huì)觸發(fā)compact操作誓酒,合并文件,生成Hfile贮聂。
6靠柑、當(dāng)HFile文件大于閾值(默認(rèn)10g),會(huì)觸發(fā)split操作吓懈,新拆分的兩個(gè)region會(huì)被master分發(fā)到對(duì)應(yīng)的兩個(gè)regionserver上歼冰。
-----------------------------------------------------------------------------------------------------------------------------------------------
注:0.96以上版本采用雙層架構(gòu),刪除了root表耻警,只使用meta定位數(shù)據(jù)隔嫡。meta表的一個(gè)region以12m來(lái)計(jì)算,可以定位16T的行鍵范圍榕栏。如果1個(gè)行鍵范圍包含10條數(shù)據(jù)畔勤,則有160T的數(shù)據(jù),所以不需要root表扒磁。