-
HBase讀數(shù)據(jù)流程
Hbase的regionserver的內(nèi)存Memstore留瞳,block cache拒迅。Memstore作業(yè)主要是寫,另一部分主要是讀的。block cache用的是LRU坪它,如果block cache達到上限骤竹,會啟動淘汰機制。
HRegionServer保存著.META.的這樣一張表以及表數(shù)據(jù)往毡,要訪問表數(shù)據(jù)蒙揣,首先Client先去訪問zookeeper,從zookeeper里面找到.META.表所在的位置信息开瞭,即找到這個.META.表在哪個HRegionServer上保存著懒震。
接著Client通過剛才獲取到的HRegionServer的IP來訪問.META.表所在的HRegionServer,從而讀取到.META.嗤详,進而獲取到.META.表中存放的元數(shù)據(jù)个扰。
Client通過元數(shù)據(jù)中存儲的信息,訪問對應(yīng)的HRegionServer葱色,然后掃描(scan)所在
HRegionServer的Memstore如果沒有递宅,掃描block cache(讀數(shù)據(jù)的緩存),如果還沒有去Storefile來查詢數(shù)據(jù)苍狰,查到數(shù)據(jù)之后將數(shù)據(jù)讀到block cache办龄。最后HRegionServer把查詢到的數(shù)據(jù)響應(yīng)給Client。
-
HBase寫數(shù)據(jù)流程
Client也是先訪問zookeeper淋昭,進而找到.META.表俐填,并獲取.META.表信息。
確定當前將要寫入的數(shù)據(jù)所對應(yīng)的RegionServer服務(wù)器和Region翔忽。
Client向該RegionServer服務(wù)器發(fā)起寫入數(shù)據(jù)請求英融,然后RegionServer收到請求并響應(yīng)。
Client先把數(shù)據(jù)寫入到HLog歇式,以防止數(shù)據(jù)丟失驶悟。
然后將數(shù)據(jù)寫入到Memstore。
如果Hlog和Memstore均寫入成功材失,則這條數(shù)據(jù)寫入成功痕鳍。在此過程中,如果Memstore達到閾值豺憔,會把Memstore中的數(shù)據(jù)flush到StoreFile中额获。
當Storefile越來越多够庙,會觸發(fā)Compact合并操作恭应,把過多的Storefile合并成一個大的Storefile。當Storefile越來越大耘眨,Region也會越來越大昼榛,達到閾值后,會觸發(fā)Split操作,將Region一分為二胆屿。
尖叫提示:因為內(nèi)存空間是有限的奥喻,所以說溢寫過程必定伴隨著大量的小文件產(chǎn)生。