要理解讀寫(xiě)流程,先要清除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的寫(xiě)請(qǐng)求過(guò)程?

1、client先從緩存中定位region,如果沒(méi)有緩存則訪問(wèn)zk,找到最先寫(xiě)入的region信息。
2、將更新寫(xiě)到WAL中。為了防止發(fā)生數(shù)據(jù)丟失。
3、將數(shù)據(jù)寫(xiě)入到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表。