Hbase 讀寫 原理

2021-09-08 22:54:07 字數 1093 閱讀 4105

客戶端讀取資訊流程(1

)client要讀取資訊,先查詢下client 端的cache中是否存在資料,如果存在,剛直接返回資料。如果不存在,則進入到zookeeper,查詢到裡面的相應資料存在的root表中的位址。 (

2)blockcache;設計用於讀入記憶體頻繁訪問的資料,每個列族都有 (

3)通過資料存在root表中位址找到.meta,最終找到hregion。找到hregion後,它會先訪問memstore中是否存在資料,如果存在,則直接讀取。如果沒有,就再到hfile中查詢資料,並將資料放到memstore (

4)最後資料返回到客戶端顯示。

儲存資料流程

由於hbase中預設的刷寫方式是隱式刷寫,所以你在put()資料時,它會自動儲存到hregion上,但當你批量處理資料時,它會將資料先儲存到client端的cache中。當你關閉隱式刷寫時,你put()的資料則會儲存到client cache中,直到你呼叫刷寫命令時,才會儲存到hregion中。

在hregion部分的儲存:要寫入的資料會先寫到hmemcache 和hlog 中,hmemcache 建立快取,hlog 同步hmemcache和hstore 的事務日誌,發起flush cache 時,資料持久化到hstore 中,並清空hmemecache。

hbase正常寫入資料時,會寫入兩個地方:預寫式日誌(wal_or_hlog)和memstore(記憶體裡的寫入緩衝區), 首先寫入cache,並記入wal,然後才寫入memstore,(都寫入才認為動作完成)保證資料的持久化,hbase中的資料永久寫入之前都在memstore,當memstore填滿後,其中的資料就會寫入硬碟生成hfile,

hbase寫資料,如果在寫入hstore是發生系統異常,就可以從hlog中恢復資料,重新寫 hstore中。

**層次分析: htable.put(put)

獲取htable對htable->htable.put(put)->put的資料存linkedlist->若autoflush=true,立即傳送請求到伺服器端,更新hbase;若autoflush=false

,當緩衝區資料大於指定的headsize時,傳送伺服器更新hbase。

實際底層是開啟多個執行緒來執行更新資料。

Hbase讀寫資料的原理解析

針對上圖的一些解釋 這裡面資料分割槽 region 儲存是為了查詢方便 即因為是集群所以能充分利用磁碟的io性 新增資料時,資料先進入hlog 預寫日誌 資料只能追加不能修改 防止資料丟失 資料在hlog寫完後再寫到記憶體中。hfile 認為是將資料進行序列化。storefile 認為是乙個檔案。d...

HBase 讀寫流程

1.讀流程 client先訪問zookeeper,從meta表讀取region的位置,然後讀取meta表中的資料。meta中又儲存了使用者表的region資訊 根據namespace 表名和rowkey在meta表中找到對應的region資訊 找到這個region對應的regionserver 查詢...

HBase讀寫流程

1 client先訪問zookeeper,從meta表讀取region的位置,然後讀取meta表中的資料。meta中又儲存了使用者表的region資訊 2 根據namespace 表名和rowkey在meta表中找到對應的region資訊 3 找到這個region對應的regionserver 4 ...