原文鏈接:http://www.ibearzmblog.com/#/technology/info?id=8ac4902f82f525e1456624d5d7a545dc
前言
大數(shù)據(jù)的核心問題無非就是存儲和計算這兩個。Hadoop中的HDFS解決了數(shù)據(jù)存儲的問題,而HBase就是在HDFS上構(gòu)建,因此Hbase既能解決大數(shù)據(jù)存儲的問題,又能解決數(shù)據(jù)實時查詢的問題。
是什么
HBase是一個高可靠、高性能、可伸縮的分布式存儲系統(tǒng),是一個NoSQL數(shù)據(jù)塊,它同樣包含行和列,不過從底層來看,跟關(guān)系型數(shù)據(jù)庫比,本質(zhì)的數(shù)據(jù)存儲結(jié)果有著本質(zhì)的差別。
特點
Hbase是通過RowKey(即是行鍵)來檢索數(shù)據(jù)的,主要用于存儲非結(jié)構(gòu)化、板結(jié)構(gòu)化數(shù)據(jù),像圖片、視頻、視頻這些非結(jié)構(gòu)化數(shù)據(jù),XML這些半結(jié)構(gòu)化數(shù)據(jù)都可以用HBase來存儲。Hbase的特性跟HDFS也類似,主要依靠橫向擴展來提高自身的存儲和計算能力。
下面是一些HBase的重要特性:
- 容量大:單表可以支持百億級的行、百萬級的列。
- 無模式:同一個表的不同行可以有不同列。
- 面向列:支持列獨立索引。
- 稀疏性:表設(shè)計可以非常稀疏,當值為空的時候并不會占用存儲空間。
- 擴展性:底層依賴HDFS,HDFS怎么樣它就怎么樣。
- 高可靠性:提供了副本機制,防止數(shù)據(jù)丟失。
HBase的組成
HBase的模型由四個部分組成:表、行鍵、列簇、單元格。
表
表是HBase作為分布式數(shù)據(jù)庫的核心概念,跟傳統(tǒng)的關(guān)系型數(shù)據(jù)庫一樣,HBase的表也是由行和列組成的,多個列可以組成列簇。
行鍵(RowKey)
可以等同于關(guān)系型數(shù)據(jù)庫里的主鍵,HBase是按照RowKey進行排序的,所以需要設(shè)計良好的行鍵來提高查詢性能。
列簇(ColumnFamily)
HBase的每個列都會歸屬于某個列簇,每個列簇里的所有成員都會有相同的前綴,例如上圖bear:html、dog:blog.com和dog:view.com這三列,一共包含兩個列簇,分別是bear和dog,列名由列簇前綴+修飾符組成。
列簇是表結(jié)構(gòu)的一部分,在使用表前就需要提前定義好,而其中的列并不是必須的,可以在插入數(shù)據(jù)的時候生成。如果經(jīng)常一起查詢的多列建議都放在同一個列簇里,因為跨列簇查詢也會影響查詢效率。
單元格(Cell)
HBase中通過行鍵和列確定的一個存儲單元成為單元格。每個單元格的內(nèi)部都保存了同一份數(shù)據(jù)的多個版本,并且按時間戳倒敘排序,如下圖:
時間戳(TimeStamp)可以在用戶插入的時候賦值,或者讓RegionServer自動賦值。
HBase的物理模型
在實際的物理存儲上,HBase是按列分開存儲的,而列則是按列簇進行分組,而一個列簇的數(shù)據(jù)都會被同一個Region進行管理(這里是指同一個列簇的數(shù)據(jù)由同一個Region管理,并不是指一個Region只負責一個列簇)。
Region是Hbase數(shù)據(jù)管理的基本單位,數(shù)據(jù)的移動、分裂等等都是以Region來進行處理。HBase表的行會按照Rowkey進行排序,而在表里的行會被分割成多個Region,如下圖所示:
在初期數(shù)據(jù)不大的時候,默認只有一個Region,后面隨著記錄的瘋狂式增長,Region就會分裂,不同的Region會被Master分發(fā)到不同的RegionServer上。
但是在HBase中,Region雖然是分布式存儲的最小單元,但并不存儲的最小單元。Region由一個或多個Store組成,每個Store保存一個Column Family,每個Store又由一個memStore和多個StoreFile組成,memStore存儲在內(nèi)存中,StoreFile則是在HDFS上,結(jié)構(gòu)如下所示:
HBase的架構(gòu)
HBase包含4個核心模塊,分別是客戶端(Client)、協(xié)調(diào)服務(wù)(Zookeeper)、主節(jié)點(HMaster)、從節(jié)點(HRegionServer)。
客戶端(Client)
Client是HBase系統(tǒng)的入口,可以通過Client來操作HBase。Client都是通過RPC調(diào)用來與HMaster和RegionServer通信。
Zookeeper
負責管理HMaster的選舉,保證集群中只有一個HMaster是Active狀態(tài),實時監(jiān)控HRegionServer狀態(tài)并通知給HMaster。存儲HBase的Schema和Table的元數(shù)據(jù)。
HMater
在HBase中可以啟動多個HMaster,但是在正常情況下只有一個HMaster是對外提供服務(wù)的,而其他的HMaster則負責備用(一主多從結(jié)構(gòu)),這些由zookeeper來控制。HMaster的主要作用如下:
- 管理用戶對表的CRUD操作。
- 調(diào)整HRegion的分布,管理HRegionServer的負載均衡。
- HRegion分裂后,負責將新的HRegion分配到其他的HRegionServer上。
- 當某個HRegionServer失效后,負責遷移HRegion到正常的HRegionServer上。
HRegionServer
主要負責響應客戶端的I/O請求。HRegionServer內(nèi)部維護了一系列的HRegion對象,一個HRegion對象等于一個Region,每個HRegion對應多個HStore,每個HStore對應一個列簇,每個列簇就是一個集中的存儲單元。
總體架構(gòu)如下:文章來源:http://www.zghlxwxcb.cn/news/detail-559760.html
結(jié)尾
HBase的總體結(jié)構(gòu)介紹到這里,后面會更新它的部署方式。文章來源地址http://www.zghlxwxcb.cn/news/detail-559760.html
到了這里,關(guān)于分布式數(shù)據(jù)庫HBase,它到底是怎么組成的?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!