要理解讀寫流程,先要清除hbase的架構(gòu)圖。以0.96版本以下的三層架構(gòu)為例:

hbase是主從架構(gòu),主節(jié)點是HMaster,從節(jié)點是HRegionServer。
HMaster:負(fù)責(zé)regionserver的運(yùn)行狀態(tài)和region負(fù)載均衡。
HRegionServer:負(fù)責(zé)存儲表格,以及響應(yīng)client的連接。包含一個HLog和多個HRegion。
zk負(fù)責(zé)保證HMaster的高可用和region server的注冊。
-----------------------------------------------------------------------------------------------------------------------------------------------
1、hbase的讀請求流程

Ⅰ從zk中獲取regionserver的meta信息。
Ⅱ通過root表,根據(jù)meta信息找到對應(yīng)的regioonserver位置信息
Ⅲ找到對應(yīng)的regionserver,獲取table的meta信息
Ⅳ通過table的meta信息,找到實際存儲table的regionserver
Ⅴ客戶端直接連接表所在的regionserver,獲取數(shù)據(jù)
--注:為了讓客戶端找到包含特定主鍵的region,HBase提供了兩張?zhí)厥獾哪夸洷恚?root和.meta。root表用來查詢所有meta表中的region位置。hbase的設(shè)計中只有一個root region,即root region從不進(jìn)行拆分。從而保證類似于B+樹的三層查找結(jié)構(gòu)。第一層是ZK中包含root region的節(jié)點,第二層是從root中查找對應(yīng)meta region的位置,第三層是從meta表中查找用戶表對應(yīng)的region的位置信息。
2、hbase的寫請求過程?

1、client先從緩存中定位region,如果沒有緩存則訪問zk,找到最先寫入的region信息。
2、將更新寫到WAL中。為了防止發(fā)生數(shù)據(jù)丟失。
3、將數(shù)據(jù)寫入到memstore中
4、數(shù)據(jù)達(dá)到閾值(默認(rèn)128m)會觸發(fā)flush操作,生成多個storefile文件。
5、當(dāng)storefile文件過多,會觸發(fā)compact操作,合并文件,生成Hfile。
6、當(dāng)HFile文件大于閾值(默認(rèn)10g),會觸發(fā)split操作,新拆分的兩個region會被master分發(fā)到對應(yīng)的兩個regionserver上。
-----------------------------------------------------------------------------------------------------------------------------------------------
注:0.96以上版本采用雙層架構(gòu),刪除了root表,只使用meta定位數(shù)據(jù)。meta表的一個region以12m來計算,可以定位16T的行鍵范圍。如果1個行鍵范圍包含10條數(shù)據(jù),則有160T的數(shù)據(jù),所以不需要root表。