HBase之寫流程與讀流程

2022-01-19 16:57:16 字數 1417 閱讀 1894

hfile檔案

儲存在磁碟的hbase表資料檔案, 格式為hfile。資料塊為儲存單元, 預設認大小64kb。

memstore

寫快取,由於hfile中的資料要求是有序的,資料是先在memstore中,排好序後,再刷寫到hfile. 每次刷寫都會形成乙個新的hfile。

wal

資料會先寫wal(write-ahead logfile)日誌檔案檔案中,然後再寫入memstore中。以便在memstore(記憶體)中的資料丟失後可以恢復.

每間隔hbase.regionserver.optionallogflushinterval(預設1s), hbase會把操作從記憶體寫入wal. 乙個regionserver上的所有region共享乙個wal例項。

wal的檢查間隔由hbase.regionserver.logroll.period定義,預設值為1小時。檢查的內容是把當前wal中的操作跟實際持久化到hdfs上的操作比較,看哪些操作已經被持久化了,被持久化的操作就會被移動到.oldlogs資料夾內(這個資料夾也是在hdfs上的)。

乙個wal例項包含有多個wal檔案。wal檔案的最大數量通過hbase.regionserver.maxlogs(預設是32)引數來定義。

blockcache

讀快取,每次查詢出的資料會快取在blockcache中,方便下次查詢.

寫流程client先訪問zookeeper,獲取hbase:meta表所在的region server, 查詢hbase:meta表獲取目標redgion server. 在將該錶的region資訊以及meta表的位置資訊快取在客戶端的meta cache之後與目標region sever進行通訊;

將資料順序寫入(追加)到wal;

將資料寫入對應的memstore,資料會在memstore進行排序;

向客戶端傳送ack, 等達到memstore的刷寫時機後,將資料刷寫到hfile。

client先訪問zookeeper,獲取hbase:meta表所在的region server, 查詢hbase:meta表獲取目標redgion server. 在將該錶的region資訊以及meta表的位置資訊快取在客戶端的meta cache之後與目標region sever進行通訊;

分別在block cache(讀快取),memstore和store file(hfile)中查詢目標資料,並將查到的所有資料塊進行合併, 之後快取到block cache中。

此處所有資料是指同一條資料的不同版本(time stamp)或者不同的型別(put/delete)。

將合併後的最終結果返回給客戶端。

hbase讀寫流程

HBase的寫流程和讀流程

1.獲取meta表的rootregion位置資訊 在客戶端寫程序時,第一次寫時,client先通過zookeeper獲取到meta表對應的region位置資訊,然後加入到程序快取中,後續再讀寫時,直接讀取快取的meta資訊對應的region資訊就行.2.找到資料要寫在哪個region上 根據獲取到的...

Hbase讀流程詳解

關鍵元件 讀快取block cache 磁碟讀的資料 memstore hstore 定位操作和寫流程中的一致關鍵字zk meta region server meta表所在位置 meta表結構 根據table和row key所在範圍 定位region 讀操作 記憶體 磁碟 一起都讀 讀完後要合併m...

HBase之寫資料流程

1.客戶端訪問zookeeper獲取hbase meta表所在的regionserver資訊。2.與對應regionserver通訊,獲取meta表,根據寫請求引數查詢出應寫入到哪個regionserver中的哪個region中,把該錶的region資訊和meta表的位置資訊儲存在客戶端本地meta...