(三)hbase的架構及儲存結構
阿新 • • 發佈:2018-12-18
Habase系統架構
ps:先了解hbase的整體架構,有些看不明白的可以先看後面,再回過頭來看。
- 系統架構
- hbase可以啟動多個 master(老大),但只有一個處於active狀態,其他的則處於backup狀態。
- 會有多個regionServer(小弟)
- Zookeepr為hbase提供叢集協調
- zookeeper
- 保證任何時候叢集只有一個Master
- 監控regionServer的狀態 將其上線下線資訊通知master
- 儲存meta表對應的region的地址
- 儲存hbase的元資料資訊 包括 有哪些表 有哪些列族等等
- Master
- 為RegionServer分配Region
- 為RegionServer進行負載的均衡
- GFS上的垃圾回收
- 處理對Schema資料的更新請求
- RegionServer
- 維護Master分配給它的region,處理對這些region的IO請求
- 負責切分在執行過程中變得過大的region
邏輯儲存
- 前面講過,行健,列族,列,單元格,時間戳
- hbase底層會通過行健來對資料進行排序,排序規則就是把行健作為字串排序
物理儲存
- hbase在行的維度還會進行切分,切為一個個的Hregion(region)
- region是hbase裡分散式儲存和負載均衡的最小單元
master會給regionServer分配Hregion,regionServer會負責外部對這些Hregion的讀寫IO。
一個Hregion會完整的分配給一個regionServer,不會被拆分。
查詢不同Hregion中的資料時,會請求不同的regionServer,達到負載均衡的目的。
- hregion是分散式儲存的最小單元,但不是儲存的最小單元
hregion儲存單元又是由若干個store組成,每個store對應一個列族。一個列族中的資料往往資料很類似,壓縮後節省儲存空間。
每個store裡都有且僅有一個memStore(基於記憶體儲存 ),及0個或多個storeFile(對應著hdfs上的一個檔案:hfile)。
- StoreFile(Hfile)的結構
- Data Blocks 段–儲存表中的資料,這部分可以被壓縮
- Meta Blocks 段 (可選的)–儲存使用者自定義的kv對,可以被壓縮。
- File Info 段–Hfile的元資訊,不被壓縮,使用者也可以在這一部分新增自己的元資訊。
- Data Block Index 段–Data Block的索引。每條索引的key是被索引的block的第一條記錄的key。
- Meta Block Index段 (可選的)–Meta Block的索引。
- Trailer–這一段是定長的。儲存了每一段的偏移量,讀取一個HFile時,會首先 讀取Trailer,Trailer儲存了每個段的起始位置(段的Magic Number用來做安全check),然後,DataBlock Index會被讀取到記憶體中,這樣,當檢索某個key時,不需要掃描整個HFile,而只需從記憶體中找到key所在的block,通過一次磁碟io將整個 block讀取到記憶體中,再找到需要的key。DataBlock Index採用LRU機制淘汰。
- HFile的Data Block,Meta Block通常採用壓縮方式儲存,壓縮之後可以大大減少網路IO和磁碟IO,隨之而來的開銷當然是需要花費cpu進行壓縮和解壓縮。