1. 程式人生 > >(三)hbase的架構及儲存結構

(三)hbase的架構及儲存結構

Habase系統架構

ps:先了解hbase的整體架構,有些看不明白的可以先看後面,再回過頭來看。

  • 系統架構
  1. hbase可以啟動多個 master(老大),但只有一個處於active狀態,其他的則處於backup狀態。
  2. 會有多個regionServer(小弟)
  3. Zookeepr為hbase提供叢集協調
  • zookeeper
  1. 保證任何時候叢集只有一個Master
  2. 監控regionServer的狀態 將其上線下線資訊通知master
  3. 儲存meta表對應的region的地址
  4. 儲存hbase的元資料資訊 包括 有哪些表 有哪些列族等等
  • Master
  1. 為RegionServer分配Region
  2. 為RegionServer進行負載的均衡
  3. GFS上的垃圾回收
  4. 處理對Schema資料的更新請求
  • RegionServer
  1. 維護Master分配給它的region,處理對這些region的IO請求
  2. 負責切分在執行過程中變得過大的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)的結構

  1. Data Blocks 段–儲存表中的資料,這部分可以被壓縮
  2. Meta Blocks 段 (可選的)–儲存使用者自定義的kv對,可以被壓縮。
  3. File Info 段–Hfile的元資訊,不被壓縮,使用者也可以在這一部分新增自己的元資訊。
  4. Data Block Index 段–Data Block的索引。每條索引的key是被索引的block的第一條記錄的key。
  5. Meta Block Index段 (可選的)–Meta Block的索引。
  6. Trailer–這一段是定長的。儲存了每一段的偏移量,讀取一個HFile時,會首先 讀取Trailer,Trailer儲存了每個段的起始位置(段的Magic Number用來做安全check),然後,DataBlock Index會被讀取到記憶體中,這樣,當檢索某個key時,不需要掃描整個HFile,而只需從記憶體中找到key所在的block,通過一次磁碟io將整個 block讀取到記憶體中,再找到需要的key。DataBlock Index採用LRU機制淘汰。
  7. HFile的Data Block,Meta Block通常採用壓縮方式儲存,壓縮之後可以大大減少網路IO和磁碟IO,隨之而來的開銷當然是需要花費cpu進行壓縮和解壓縮。