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