Hbase結構和讀寫過程
阿新 • • 發佈:2019-02-04
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的方式找到.
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的資料