Hbase結構和讀寫過程

2021-08-15 05:34:38 字數 1877 閱讀 7742

1、hbase寫如過程圖(**於網路)

2、hbase的結構

master:

hbase master用於協調多個region server,偵測各個regionserver之間的狀態,並平衡regionserver之間的負載,並且分配region給regionserver。

region server:乙個regionserver包含了多個region(10-1000),每個region大小為

256mb

-20g(預設10g)。regionserver管理region,以及實現讀寫操作。client直接連線regionserver,並通訊獲取hbase中的資料或者進行寫入。(通過zk連線,master掛了都沒關係)可以看出,乙個regionserver(乙個datanode節點)最多可以管理最大20t的資料

region:真實存放hbase資料的地方,也就說region是hbase可用性和分布式的基本單位。預設乙個表建立乙個region。region是hbase的最小邏輯單元。

store:乙個列族對應乙個store,也就是乙個region對應乙個或多個store,乙個store包含乙個或多個storefile,storefile包含乙個或多個hfile,hfile才是真實的儲存檔案,storefile只是hfile上做了輕量的封裝。

3、lsm-tree和hlog提公升寫入速度和確保資料的高可用

為了提公升hbase的寫入速度,hbase採用了lsm-tree(

log-structure merge-tree)

快速地建立索引。b-tree是建立索引的通用技術,但是,在大併發插入資料的情況下,b-tree需要大量的磁碟隨機io,很顯然,大量的磁碟隨機io會嚴重影響索引建立的速度。

lsm-tree

要思想是劃分不同等級的樹。以兩級樹為例,可以想象乙份索引資料由兩棵樹組成,一棵樹存在於記憶體(實際上記憶體中有n棵樹),一棵樹存在於磁碟。hbase寫入的過程其實就是寫入到記憶體中,在記憶體中建立n棵小樹。

小樹先寫到記憶體中,為了防止記憶體資料丟失,寫記憶體的同時需要暫時持久化到磁碟,對應了hbase的memstore和hlog(hlog的存在就是確保記憶體中的資料丟失)。

memstore上的樹達到一定大小之後,需要flush到hregion磁碟中(一般是hadoop datanode),這樣memstore就變成了store上的磁碟檔案storefile,定期hregionserver對datanode的資料做merge操作,徹底刪除無效空間,多棵小樹在這個時機合併成大樹,來增強讀效能。

為什麼lsm-tree的插入很快

1. 首先,插入操作首先會作用於記憶體,並且,記憶體中的樹不會很大,這會很快。

2. 合併操作會順序寫入乙個或多個磁碟頁,這比隨機寫快得多。

4、lsm-tree是否影響讀取資料的速度

hbase讀取資料的過程:

最先讀取記憶體中的小樹(n棵),如果記憶體中沒有找到,就會查詢磁碟(b+樹)

可以看出,答案是會影響的,增加了遍歷記憶體中n棵小樹的遍歷,當然,記憶體操作會很快。

5、lsm tree優化方式:

a、bloom filter: 就是個帶隨即概率的bitmap,可以快速的告訴你,某乙個小的有序結構裡有沒有指定的那個資料的。於是就可以不用二分查詢,而只需簡單的計算幾次就能知道資料是否在某個小集合裡啦。效率得到了提公升,但付出的是空間代價。

b、compact:小樹合併為大樹:因為小樹他效能有問題,所以要有個程序不斷地將小樹合併到大樹上,這樣大部分的

老資料查詢也可以直接使用log2n的方式找到.

Hbase讀寫過程

補充 布隆過濾器引數型別有2種 row row col 細節描述 hbase使用memstore和storefile儲存對錶的更新。資料在更新時首先寫入log wal log 和記憶體 memstore 中,memstore中的資料是排序的,當memstore累計到一定閾值時,就會建立乙個新的mem...

(四)hbase讀寫過程

寫入資料的過程 通過行鍵 哪個region regionserver region 通過列族 region中某個store 先向hlog裡插入操作記錄 把資料直接放入 memstore 返回寫入成功 後台去把memstore的資料flush到storefile 寫入資料的思想 找到具體的storef...

HBase 的讀寫過程

一 hbase的讀操作 zookeeper meta regionserver region memstore storefile 1 首先從zookerper找到meta表的region的位置,然後讀取meta表中的資料。而meta中又儲存了使用者表的region資訊 2 根據namespace ...