HBase系列(二):HBase架構及讀寫流程
本篇博文從分析HBase架構開始,首先從架構中各個組成部分開始,接著從HBase寫入過程角度入手,分析HFile的Compaction合併、Region的Split分裂過程及觸發機制。
架構分析
1、HMaster
- 負責管理HBase元資料,即表的結構、表儲存的Region等元資訊。
- 負責表的建立,刪除和修改(因為這些操作會導致HBase元資料的變動)。
- 負責為HRegionServer分配Region,分配好後也會將元資料寫入相應位置(後面會詳細講述放在哪)。
如果對可用性要求較高,它需要做HA高可用(通過Zookeeper)。但是HMaster不會去處理Client端的資料讀寫請求
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儲存一個列族。
HBase 讀寫過程
寫過程
Client訪問ZK,根據ROOT表獲取meta表所在Region的位置資訊,並將該位置資訊寫入Client Cache。
(注:為了加快資料訪問速度,我們將元資料、Region位置等資訊快取在Client Cache中。)Client讀取meta表,再根據meta表中查詢得到的Namespace、表名和RowKey等相關資訊,獲取將要寫入Region的位置資訊(此過程即Region三層定位,如下圖),最後client端會將meta表寫入Client Cache。
Client向上一步HRegionServer發出寫請求,HRegionServer先將操作和資料寫入HLog(預寫日誌,Write Ahead Log,WAL),再將資料寫入MemStore,並保持有序。
(聯想:HDFS中也是如此,EditLog寫入時機也是在真實讀寫之前發生)當MemStore的資料量超過閾值時,將資料溢寫磁碟,生成一個StoreFile檔案。
當Store中StoreFile的數量超過閾值時,將若干小StoreFile合併(Compact)為一個大StoreFile。
當Region中最大Store的大小超過閾值時,Region分裂(Split),等分成兩個子Region。
具體合併與分裂過程我們接下來講解。
Region三層定位讀過程
- 獲取將要讀取Region的位置資訊(同讀的1、2步)。
- Client向HRegionServer發出讀請求。
- HRegionServer先從MemStore讀取資料,如未找到,再從StoreFile中讀取。
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表。
以上,即是HBase詳細架構,以及在此架構上的讀寫操作的過程和可能發生的事件。後續博文會對HBase二級索引及BulkLoad相關內容進行進一步研究。