HBase的功能非常強大,下面是我對於HBase的一些理解,歡迎指點。
HBase是Apache Hadoop的數據庫,能夠對大型數據提供隨機、實時的讀寫訪問。HBase的目標是存儲並處理大型的數據。HBase是一個開源的,分佈式的,多版本的,面向列的存儲模型。它存儲的是鬆散型數據。
Region
1. Table隨着記錄增多不斷變大,會自動分裂成多份Splits,成爲Regions
2. 一個region由[startkey,endkey)表示
3. 不同region會被Master分配給相應的RegionServer進行管理
兩張特殊表:-ROOT- & .META.
對於HBase中table的讀取,採用三級尋址
.META. 記錄用戶表的Region信息,同時,.META.也可以有多個region
-ROOT- 記錄.META.表的Region信息,但是,-ROOT-只有一個region
Zookeeper中記錄了-ROOT-表的location
客戶端訪問數據的流程:
Client -> Zookeeper -> -ROOT- -> .META. -> 用戶數據表
多次網絡操作,不過client端有cache緩存
HBase 系統架構
組成部件說明
Client:
使用HBase RPC機制與HMaster和HRegionServer進行通信
Client與HMaster進行通信進行管理類操作
Client與HRegionServer進行數據讀寫類操作
Zookeeper:
Zookeeper Quorum存儲-ROOT-表地址、HMaster地址
HRegionServer把自己以Ephedral方式註冊到Zookeeper中,HMaster隨時感知各個HRegionServer的健康狀況
Zookeeper避免HMaster單點問題
HMaster:
HMaster沒有單點問題,HBase中可以啓動多個HMaster,通過Zookeeper的Master
Election機制保證總有一個Master在運行
主要負責Table和Region的管理工作:
1 管理用戶對錶的增刪改查操作
2 管理HRegionServer的負載均衡,調整Region分佈
3 Region Split後,負責新Region的分佈
4 在HRegionServer停機後,負責失效HRegionServer上Region遷移
HRegionServer:
HBase中最核心的模塊,主要負責響應用戶I/O請求,向HDFS文件系統中讀寫數據。
HRegionServer管理一些列HRegion對象;
每個HRegion對應Table中一個Region,HRegion由多個HStore組成;
每個HStore對應Table中一個Column Family的存儲;
Column Family就是一個集中的存儲單元,故將具有相同IO特性的Column放在一個Column
Family會更高效
HStore:
HBase存儲的核心。由MemStore和StoreFile組成。
MemStore是SortedMemory Buffer。用戶寫入數據的流程:
Client寫入 ->存入MemStore,一直到MemStore滿
-> Flush成一個StoreFile,直至增長到一定閾值 ->出發Compact合併操作
->多個StoreFile合併成一個StoreFile,同時進行版本合併和數據刪除 ->當StoreFiles
Compact後,逐步形成越來越大的StoreFile ->單個StoreFile大小超過一定閾值後,觸發Split操作,把當前Region
Split成2個Region,Region會下線,新Split出的2個孩子Region會被HMaster分配到相應的HRegionServer上,使得原先1個Region的壓力得以分流到2個Region上
由此過程可知,HBase只是增加數據,有所得更新和刪除操作,都是在Compact階段做的,所以,用戶寫操作只需要進入到內存即可立即返回,從而保證I/O高性能。
下面是HBase的整體架構圖:
這張整體架構圖總的來說沒有什麼問題,很完整的展示了Client往HBase中存儲和讀取數據的過程,但是有一個細節問題需要注意,就是HLOG是針對於HTable 的,並不是每一個region都有一個hlog,這一點需要注意。