1. 程式人生 > 實用技巧 >HBase 的讀寫過程

HBase 的讀寫過程

Hbase讀寫流程

一、hbase的讀操作:
  ZooKeeper—meta–regionserver–region–memstore–storefile
  1、首先從zookerper找到meta表的region的位置,然後讀取meta表中的資料。而meta中又儲存了使用者表的region資訊
  2、根據namespace、表名和rowkey根據meta表中的資料找到寫入資料對於的region資訊
  3、然後找到對於的regionserver
  4、查詢對應的region
  5、先從Memstore找資料,如果沒有,再到StoreFile上讀
  在這裡插入圖片描述
二、hbase的寫操作:
  ZooKeeper—meta–regionserver–1、Hlog 1、MemStore–storefile

  1、首先從zookerper找到meta表的region的位置,然後讀取meta表中的資料。而meta中又儲存了使用者表的region資訊
  2、根據namespace、表名和rowkey根據meta表中的資料找到寫入資料對於的region資訊
  3、然後找到對於的regionserver
  4、把資料分別寫到Hlog和memstore各一份
    4、1當memstore達到閾值後把資料刷成一個storefile檔案,當compact後,逐漸形成越來越大的storefile後觸發spilt,
把當前的StoreFile分成兩個,這裡相當於把一個大的region分割成兩個region
    4、1若MemStore中的資料有丟失,則可以從HLog上恢復,當多個StoreFile檔案達到一定的大小後,會觸發Compact合併操作,
合併為一個StoreFile,這裡同時進行版本的合併和資料刪除
在這裡插入圖片描述
下面對hbase架構進行分析

在這裡插入圖片描述
架構分析
1、HMaster
負責管理HBase元資料,即表的結構、表儲存的Region等元資訊。
負責表的建立,刪除和修改(因為這些操作會導致HBase元資料的變動)。
負責為HRegionServer分配Region,分配好後也會將元資料寫入相應位置(後面會詳細講述放在哪)。
如果對可用性要求較高,它需要做HA高可用(通過Zookeeper)。但是HMaster不會去處理Client端的資料讀寫請求,因為這樣會加大其負載壓力,具體的讀寫請求它會交給HRegionServer來做。

2、HRegionServer
一個RegionServer裡有多個Region。
處理Client端的讀寫請求(根據從HMaster返回的元資料找到對應的Region來讀寫資料)。
管理Region的Split分裂、StoreFile的Compaction合併。
一個RegionServer管理著多個Region,在HBase執行期間,可以動態新增、刪除HRegionServer。

3、HRegion
一個HRegion裡可能有1個或多個Store。
HRegionServer維護一個HLog。
HRegion是分散式儲存和負載的最小單元。
表通常被儲存在多個HRegionServer的多個Region中。
因為HBase用於儲存海量資料,故一張表中資料量非常之大,單機一般存不下這麼大的資料,故HBase會將一張表按照行水平將大表劃分為多個Region,每個Region儲存表的一段連續資料。 初始只有1個Region,當一個Region增大到某個閾值後,便分割為兩個。

4、Store
Store是儲存落盤的最小單元,由記憶體中的MemStore和磁碟中的若干StoreFile組成。
一個Store裡有1個或多個StoreFile和一個memStore。
每個Store儲存一個列族
StoreFile合併(Compaction)
目的:減少StoreFile數量,提升資料讀取效率。

Compaction分為兩種:

major compaction
將Store下面所有StoreFile合併為一個StoreFile,此操作會刪除其他版本的資料(不同時間戳的)

minor compaction
選取Store下的部分StoreFile,將它們合併為一個StoreFile,此操作不會刪除其他版本資料。

Region分割(Split)
目的:實現資料訪問的負載均衡。

做法:利用Middle Key將當前Region劃分為兩個等分的子Region。需要指出的是:Split會產生大量的I/O操作,Split開始前和Split完成後,HRegionServer都會通知HMaster。Split完成後,由於Region對映關係已變更,故HRegionServer會更新meta表。