一:獲取region存儲位置信息
寫數據和讀數據一般都會獲取hbase的region的位置信息。大概步驟為:
1- 從zookeeper中獲取.ROOT.表的位置信息,在zookeeper的存儲位置為/hbase/root-region-server;
2- 根據.ROOT.表中信息,獲取.META.表的位置信息;
3- .META.表中存儲的數據為每一個region存儲位置;
二: 向hbase表中插入數據
hbase中緩存分為兩層:memstore和blockcache。
1- 首先寫入到WAL文件中,目的是為了數據不丟失;
2- 再把數據插入到memstore緩存中,當memstore達到設置大小閾值時,會進行flush進程;
3- flush過程中,需要獲取每一個region存儲的位置。
三:從hbase中讀取數據
blockcache主要提供給讀使用。讀請求先到memstore中查數據,查不到就到blockcache中查,再查不到就會到磁盤上讀,並把讀的結果放入blockcache。
blockcache采用的算法為LRU(最近最少使用算法),因此當blockcache達到上限后,會啟動淘汰機制,淘汰掉最老的一批數據。
一個regionserver上有一個blockcache和N個memstore,它們的大小之和不能大於等於heapsize * 0.8,否則hbase不能啟動。默認blockcache為0.2,而memstore為0.4。對於注重讀響應時間的系統,應該將blockcache設大些,比如設置blockcache=0.4,memstore=0.39。這會加大緩存命中率。