HBase讀寫資料流程,布隆過濾器

2021-09-19 20:41:10 字數 1233 閱讀 6818

客戶端要訪問zk,因為zk上儲存著root表的位置資訊,進而可以一層層的找到需要訪問的hregionserver(通過root表找到meta表,進而確定是哪個hregionserver)

客戶端要預寫日誌(wal log),防止宕機,日誌其實儲存位置是在hdfs集群上的

注意:日誌在hdfs上會定期合併的。客戶端要寫入到記憶體(memstore),當達到128m的,會進行刷寫磁碟(storefile),storefile的儲存位置也是在hdfs集群上的storefile的數量達到一定大小的時候會進行合併

storefile達到10g時會進行split,split就是資料的分流

注意:第4步的原因,當storefile不合併的情況下,容易造成數量過多,影響查詢效率

第5步的原因,當乙個storfile過大的時候,在乙個storefile內部查詢,也會影響效率,10個g是效率比較高的一種方式。

客戶端首先要訪問zk,zk上儲存著root表的資訊, 最終找到hregionserver。

注意:root表和meta表是存放在hregionserver上的,這點和hbase的普通表不太一樣

開始讀取hregionsever,首先讀取memstore,因為memstore其中儲存的是熱資料(即最新的資料),如果沒有找到想要資料,則再去讀取storefile。

那麼問題來了,那麼多storefile,如何確定去讀取哪乙個storefile?

解決方案就是布隆過濾器(詳解請看第三部分)。

舉例說明:

例如要查詢乙個url,我們可以將存放url的storefile檔案的rowkey轉成乙個二進位制陣列儲存起來,只儲存1,不存0,把0位空著,這樣我們可以使用這個陣列去儲存多個storefile檔案。

我們當去查詢乙個url的時候,不必要去全部掃瞄所有的storefile檔案,僅僅去匹配那個陣列就行,當然就算所有的1全部匹配上,也有可能出錯,但整體減少的工作量,還是很可觀的,誤差率咋百分之一左右。

這就是一種空間換時間的做法。

HBase讀寫資料流程

hbase的系統表 hbase namespace 儲存了hbase中的所有namespace的資訊 hbase meta 儲存了hbase中所有的region的資訊,包括rowkey範圍,region所在的regionserver的位址。hbase meta 在zookeeper中,進入zooke...

HBase讀寫資料流程

客戶端現在要插入一條資料,rowkey r000001,這條資料應該寫入到table表中的那個region中呢?1 客戶端要連線zookeeper,從zk的 hbase 節點找到 hbase meta 表所在的regionserver host port 2 regionserver 掃瞄 hbas...

HBASE讀寫資料流程

客戶端請求寫資料首先會向zookeeper中的leader傳送寫資料的請求 在請求成功後leader會向客戶端傳送meta表的位置,告訴客戶端meta表在哪台regsion server上面 解析出meta表中的資料後,會向對應的regsion server機器傳送寫資料請求,請求成功後會在向該機器...