聊一聊 HBase 是如何寫入資料的?

2022-10-11 07:51:20 字數 1089 閱讀 8791

hbase client 訪問 zookeeper;

獲取寫入 region 所在的位置,即獲取 hbase:meta 表位於哪個 region server;

訪問對應的 region server;

獲取 hbase:meta 表,並查詢出目標資料位於哪個 region server 中的哪個 region 中。並將該 table 的 region 資訊以及 meta 表的位置資訊快取在客戶端的 meta cache,方便下次訪問;

hbase client 向 region server 傳送寫 hlog 請求;

region server 會通過順序寫入磁碟的方式,將 hlog 儲存在 hdfs 上;

hbase client 向 region server 傳送寫 memstore 請求;

只有當寫 hlog 和寫 memstore 的請求都成功完成之後,並將反饋給 hbase client,這時對於整個 hbase client 寫入流程已經完成。

hbase 會根據 memstore 配置的刷盤策略定時將資料重新整理到 storefile 中,完成資料持久化儲存。

wal (write-ahead-log) 預寫日誌是 hbase 的 regionserver 在處理資料插入和刪除過程中用來記錄操作內容的一種日誌。每次put、delete等一條記錄時,首先將其資料寫入到 regionserver 對應的 hlog 檔案中去。

而wal是儲存在hdfs上的持久化檔案,資料到達 region 時先寫入 wal,然後被載入到 memstore 中。這樣就算region宕機了,操作沒來得及執行持久化,也可以再重啟的時候從 wal 載入操作並執行。

那麼,我們從寫入流程中可以看出,資料進入 hfile 之前就已經被持久化到 wal了,而 wal 就是在 hdfs 上的,memstore 是在記憶體中的,增加 memstore 並不能提高寫入效能,為什麼還要從 wal 載入到 memstore中,再刷寫成 hfile 呢?

所以 memstore 的意義在於維持資料按照rowkey的字典序排列,而不是做乙個快取提高寫入效率。

聊一聊元資料

這個話題來自我的msn space。這是原文 元資料 metadata 這個詞現在到處氾濫。其實我對元資料充其量只能說有自己的理解而已,並不能確信這個理解是正確的。我認為,資料結構分為三個層次 uml可是四層哦 例項層 直接描述特異化的資料場景 元資料層 描述例項的結構的一組資料 元資料的元資料層 ...

聊一聊hive資料傾斜

info基本資訊表 user id name agegender 1henry16男 2jack17男 3anny18女 4candy19女 5kate20女 burke 21frank 22ellen 23ken 24mili 25.score成績表 user id subject id scor...

聊一聊資料結構

資料結構 2.棧和佇列 二 樹三 圖 線性結構是一種基本的資料結構,主要用於對客觀世界中具有單一前驅和後繼的資料關係進行描述。線性結構的特點是資料元素之間呈現一種線性關係,即元素 乙個接乙個排列 線性表常採用順序儲存和鏈式儲存,主要的操作是 插入 刪除 查詢 線性表的順序儲存是指用一組位址連續的儲存...