HBase架構及讀寫流程

2021-09-16 18:17:29 字數 2249 閱讀 5073

hbase架構分析

負責管理hbase元資料,即表的結構、表儲存的region等元資訊。

負責表的建立,刪除和修改(因為這些操作會導致hbase元資料的變動)。

負責為hregionserver分配region,分配好後也會將元資料寫入相應位置(後面會詳細講述放在哪)。

如果對可用性要求較高,它需要做ha高可用(通過zookeeper)。但是hmaster不會去處理client端的資料讀寫請求,因為這樣會加大其負載壓力,具體的讀寫請求它會交給hregionserver來做。

乙個regionserver裡有多個region。

處理client端的讀寫請求(根據從hmaster返回的元資料找到對應的region來讀寫資料)。

管理region的split**、storefile的compaction合併。

乙個regionserver管理著多個region,在hbase執行期間,可以動態新增、刪除hregionserver。

乙個hregion裡可能有1個或多個store。

hregionserver維護乙個hlog。

hregion是分布式儲存和負載的最小單元。

表通常被儲存在多個hregionserver的多個region中。

因為hbase用於儲存海量資料,故一張表中資料量非常之大,單機一般存不下這麼大的資料,故hbase會將一張表按照行水平將大表劃分為多個region,每個region儲存表的一段連續資料。 初始只有1個region,當乙個region增大到某個閾值後,便分割為兩個。

store是儲存落盤的最小單元,由記憶體中的memstore和磁碟中的若干storefile組成。

乙個store裡有1個或多個storefile和乙個memstore。

每個store儲存乙個列族。

hbase 讀寫過程

1.   client訪問zk,根據root表獲取meta表所在region的位置資訊,並將該位置資訊寫入client cache。 

(注:為了加快資料訪問速度,我們將元資料、region位置等資訊快取在client cache中。)

2.   client讀取meta表,再根據meta表中查詢得到的namespace、表名和rowkey等相關資訊,獲取將要寫入region的位置資訊(此過程即region三層定位,如下圖),最後client端會將meta表寫入client cache。

3.  client向上一步hregionserver發出寫請求,hregionserver先將操作和資料寫入hlog(預寫日誌,write ahead log,wal),再將資料寫入memstore,並保持有序。 

(聯想:hdfs中也是如此,editlog寫入時機也是在真實讀寫之前發生)

4.  當memstore的資料量超過閾值時,將資料溢寫磁碟,生成乙個storefile檔案。 

當store中storefile的數量超過閾值時,將若干小storefile合併(compact)為乙個大storefile。 

當region中最大store的大小超過閾值時,region**(split),等分成兩個子region。

1. 獲取將要讀取region的位置資訊(同讀的1、2步)。

2.  client向hregionserver發出讀請求。

3.  hregionserver先從memstore讀取資料,如未找到,再從storefile中讀取。

目的:減少storefile數量,提公升資料讀取效率。

compaction分為兩種:

major compaction 

將store下面**所有**storefile合併為乙個storefile,此操作會刪除其他版本的資料(不同時間戳的)

minor compaction 

選取store下的**部分**storefile,將它們合併為乙個storefile,此操作不會刪除其他版本資料。

目的:實現資料訪問的負載均衡。

做法:利用middle key將當前region劃分為兩個等分的子region。需要指出的是:split會產生大量的i/o操作,split開始前和split完成後,hregionserver都會通知hmaster。split完成後,由於region對映關係已變更,故hregionserver會更新meta表。

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 ...

HBase讀寫流程

寫流程參考 1.首先,客戶端需要獲知其想要讀取的資訊的region的位置,這個時候,client訪問hbase上資料時並不需要hmaster參與 hmaster僅僅維護著table和region的元資料資訊,負載很低 只需要訪問zookeeper,從meta表獲取相應region資訊 位址和埠等 c...