HBase的寫流程和讀流程

2021-10-12 17:37:41 字數 1729 閱讀 5929

1.獲取meta表的rootregion位置資訊

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

2.找到資料要寫在哪個region上

根據獲取到的rootregion位置資訊,請求region所在的region server服務,根據namespace(相當於資料庫名),表名和rowkey在meta表中找到寫入資料對應的region資訊.

找到最大的小於需要找的rowkey的那個rowkey對應的region,這個region就是目標region資訊

3.發起實際的寫入請求

向region對應的region server發起寫入請求

4.wal log寫入

將插入/更新寫入wal中,當客戶端發起put/delete請求時,考慮到寫入記憶體會有丟失資料的風險,因此在寫入快取前,hbase會先寫入到wal中(wal儲存在hdfs上), 那麼即使發生宕機,也可以通過wal還原初始資料.

5.memstore寫入與storefile落地

將更新寫入memstore中,當這個記憶體達到預設的閾值,會觸發flush memstore,把memstore中的資料寫出到hdfs上,生成乙個storefile.

6.storefile合併

隨著storefile檔案的不斷增多,當增長到一定閾值後,會觸發compact合併操作,將多個storefile合併成乙個,同時會刪除舊版本.

store通過不斷的compact合併,逐步形成更大的storefile

7.region拆分

單個storefile大小超過閾值後,會觸發split操作,把當前region拆分成兩個,新拆分的2個region會被hmaster分配到相應的兩個regionserver上,有可能是當前的regionserver,也有可能是別的.

1.獲取meta表的rootregion位置資訊

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

2.找到資料要寫在哪個region上

根據獲取到的rootregion位置資訊,請求region所在的region server服務,根據namespace(相當於資料庫名),表名和rowkey在meta表中找到寫入資料對應的region資訊.

找到最大的小於需要找的rowkey的那個rowkey對應的region,這個region就是目標region資訊

3.發起實際的寫入請求

向region對應的region server發起讀取請求

4.先從memstore中查詢資料,如果找到則返回

5.再從blockcache查詢資料,如果找到就返回

6. 再從storefile中查詢資料,如果找到則返回,如果沒有找到則返回null,

如果是從storefile中讀取到的資料,則要寫入blockcache後再返回給客戶端

HBase之寫流程與讀流程

hfile檔案 儲存在磁碟的hbase表資料檔案,格式為hfile。資料塊為儲存單元,預設認大小64kb。memstore 寫快取,由於hfile中的資料要求是有序的,資料是先在memstore中,排好序後,再刷寫到hfile.每次刷寫都會形成乙個新的hfile。wal 資料會先寫wal write...

Hbase讀流程詳解

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

雲計算HDFS的讀流程和寫流程

雲計算hdfs的讀流程和寫流程。1 寫流程 如上 client表示客戶端,namenode為主,datanode為從,要儲存的資料為data 1 客戶端向namenode發起請求,需要儲存資料data 2 因為namenode中是記錄了所有datanode的相關資訊的,而資料最終要儲存的地方就是da...