HBase架構
Client
- 包含訪問HBase的接口並維護cache來加快對HBase的訪問
Zookeeper
- 保證任何時候,集羣中只有一個master
- 存儲所有Region的尋址入口
- 實時監控Region server的上線和下線信息。並實時通知Master
- 存儲HBase的schema和table元數據
Master
- 爲Region server分配region
- 負責Region server的負載均衡
- 發現失效的Region server並重新分配其上的region
- 管理用戶對table的增刪改操作
RegionServer
- Region server維護region,處理對這些region的IO請求
- Region server負責切分在運行過程中變得過大的region
Region
- HBase自動把表水平劃分成多個區域(region),每個region會保存一個表裏面某段連續的數據
- 每個表一開始只有一個region,隨着數據不斷插入表,region不斷增大,當增大到一個閥值的時候,region就會等會成兩個新的region(裂變)
- 當table中的行不斷增多,就會有越來越多的region。這樣一張完整的表被保存在多個Regionserver上。
Memstore與storefile
- 一個region由多個store組成,一個store對應一個CF(列族)
- store包括位於內存中的memstore和位於磁盤的storefile,寫操作先寫入memstore,當memstore中的數據達到某個閥值,hregionserver會啓動flashcache進程寫入storefile,每次寫入行成單獨的一個storefile
- 當storefile文件的數量增長到一定閥值後,系統會進行合併(minor、major、compaction),在合併過程中會進行版本合併和刪除工作(major),形成更大的storefile
- 當一個region所有storefile的大小和數量超過一定閥值後,會把當前的region分割爲兩個,並由hmaster分配到相應的regionserver服務器,實現負載均衡
- 客戶端檢索數據,先在memstore找,找不到再找storefile
HRegion是HBase中分佈式存儲和負載均衡最小單元。最小單元就表示不同的HRegion可以分佈在不同的HRegion server上。
HRegion由一個或者多個Sotre組成,每個store保存一個columns family。
每個store又由一個menstore和0至多個storefile組成。如圖:storefile以HFile格式保存在HDFS上。