什么是HBase
HBase的原型是Google的BigTable論文津坑,受到了該論文思想的啟發(fā),目前作為Hadoop的子項目來開發(fā)維護傲霸,用于支持結(jié)構(gòu)化的數(shù)據(jù)存儲
HBase是一個高可靠性疆瑰、高性能、面向列昙啄、可伸縮的分布式存儲系統(tǒng)穆役,利用HBASE技術(shù)可在廉價PC Server上搭建起大規(guī)模結(jié)構(gòu)化存儲集群
HBase的目標是存儲并處理大型的數(shù)據(jù),更具體來說是僅需使用普通的硬件配置梳凛,就能夠處理由成千上萬的行和列所組成的大型數(shù)據(jù)
HBase是Google Bigtable的開源實現(xiàn)耿币,但是也有很多不同之處。比如:Google Bigtable利用GFS作為其文件存儲系統(tǒng)韧拒,HBase利用Hadoop HDFS作為其文件存儲系統(tǒng)淹接;Google運行MAPREDUCE來處理Bigtable中的海量數(shù)據(jù),HBase同樣利用Hadoop MapReduce來處理HBase中的海量數(shù)據(jù)叛溢;Google Bigtable利用Chubby作為協(xié)同服務塑悼,HBase利用Zookeeper作為對應。
Hbase特點
- 海量存儲
Hbase適合存儲PB級別的海量數(shù)據(jù)雇初,在PB級別的數(shù)據(jù)以及采用廉價PC存儲的情況下拢肆,能在幾十到百毫秒內(nèi)返回數(shù)據(jù)。這與Hbase的極易擴展性息息相關。正式因為Hbase良好的擴展性郭怪,才為海量數(shù)據(jù)的存儲提供了便利 - 列式存儲
這里的列式存儲其實說的是列族存儲支示,Hbase是根據(jù)列族來存儲數(shù)據(jù)的。列族下面可以有非常多的列鄙才,列族在創(chuàng)建表的時候就必須指定颂鸿。 - 極易擴展
Hbase的擴展性主要體現(xiàn)在兩個方面,一個是基于上層處理能力(RegionServer)的擴展攒庵,一個是基于存儲的擴展(HDFS)嘴纺。
通過橫向添加RegionSever的機器,進行水平擴展浓冒,提升Hbase上層的處理能力栽渴,提升Hbsae服務更多Region的能力。
備注:RegionServer的作用是管理region稳懒、承接業(yè)務的訪問闲擦,這個后面會詳細的介紹通過橫向添加Datanode的機器,進行存儲層擴容场梆,提升Hbase的數(shù)據(jù)存儲能力和提升后端存儲的讀寫能力墅冷。 - 高并發(fā)
由于目前大部分使用Hbase的架構(gòu),都是采用的廉價PC或油,因此單個IO的延遲其實并不小寞忿,一般在幾十到上百ms之間。這里說的高并發(fā)顶岸,主要是在并發(fā)的情況下腔彰,Hbase的單個IO延遲下降并不多。能獲得高并發(fā)蜕琴、低延遲的服務萍桌。 - 稀疏
稀疏主要是針對Hbase列的靈活性,在列族中凌简,你可以指定任意多的列上炎,在列數(shù)據(jù)為空的情況下,是不會占用存儲空間的
HBase架構(gòu)
從圖中可以看出Hbase是由Client雏搂、Zookeeper藕施、Master、HRegionServer凸郑、HDFS等幾個組件組成裳食,下面來介紹一下幾個組件的相關功能
- Client
Client包含了訪問Hbase的接口,另外Client還維護了對應的cache來加速Hbase的訪問芙沥,比如cache的.META.元數(shù)據(jù)的信息诲祸。 - Zookeeper
HBase通過Zookeeper來做master的高可用浊吏、RegionServer的監(jiān)控、元數(shù)據(jù)的入口以及集群配置的維護等工作救氯。具體工作如下
通過Zoopkeeper來保證集群中只有1個master在運行找田,如果master異常,會通過競爭機制產(chǎn)生新的master提供服務
通過Zoopkeeper來監(jiān)控RegionServer的狀態(tài)着憨,當RegionSevrer有異常的時候墩衙,通過回調(diào)的形式通知Master RegionServer上下線的信息
通過Zoopkeeper存儲元數(shù)據(jù)的統(tǒng)一入口地址 - Hmaster
master節(jié)點的主要職責如下
為RegionServer分配Region
維護整個集群的負載均衡
維護集群的元數(shù)據(jù)信息
發(fā)現(xiàn)失效的Region,并將失效的Region分配到正常的RegionServer上
當RegionSever失效的時候甲抖,協(xié)調(diào)對應Hlog的拆分 - HregionServer
HregionServer直接對接用戶的讀寫請求漆改,是真正的“干活”的節(jié)點。它的功能概括如下
管理master為其分配的Region
處理來自客戶端的讀寫請求
負責和底層HDFS的交互准谚,存儲數(shù)據(jù)到HDFS
負責Region變大以后的拆分
負責Storefile的合并工作 - HDFS
HDFS為Hbase提供最終的底層數(shù)據(jù)存儲服務挫剑,同時為HBase提供高可用(Hlog存儲在HDFS)的支持,具體功能概括如下
提供元數(shù)據(jù)和表數(shù)據(jù)的底層分布式存儲服務
數(shù)據(jù)多副本氛魁,保證的高可靠和高可用性
HBase中的角色
HMaster
功能
1.監(jiān)控RegionServer
2.處理RegionServer故障轉(zhuǎn)移
3.處理元數(shù)據(jù)的變更
4.處理region的分配或轉(zhuǎn)移
5.在空閑時間進行數(shù)據(jù)的負載均衡
6.通過Zookeeper發(fā)布自己的位置給客戶端
RegionServer
功能
1.負責存儲HBase的實際數(shù)據(jù)
2.處理分配給它的Region
3.刷新緩存到HDFS
4.維護Hlog
5.執(zhí)行壓縮
6.負責處理Region分片
其他組件
Write-Ahead logs
HBase的修改記錄暮顺,當對HBase讀寫數(shù)據(jù)的時候,數(shù)據(jù)不是直接寫進磁盤秀存,它會在內(nèi)存中保留一段時間(時間以及數(shù)據(jù)量閾值可以設定)。但把數(shù)據(jù)保存在內(nèi)存中可能有更高的概率引起數(shù)據(jù)丟失羽氮,為了解決這個問題或链,數(shù)據(jù)會先寫在一個叫做Write-Ahead logfile的文件中,然后再寫入內(nèi)存中档押。所以在系統(tǒng)出現(xiàn)故障的時候澳盐,數(shù)據(jù)可以通過這個日志文件重建。
Region
Hbase表的分片令宿,HBase表會根據(jù)RowKey值被切分成不同的region存儲在RegionServer中叼耙,在一個RegionServer中可以有多個不同的region。
Store
HFile存儲在Store中粒没,一個Store對應HBase表中的一個列族筛婉。
MemStore
顧名思義,就是內(nèi)存存儲癞松,位于內(nèi)存中爽撒,用來保存當前的數(shù)據(jù)操作,所以當數(shù)據(jù)保存在WAL中之后响蓉,RegsionServer會在內(nèi)存中存儲鍵值對硕勿。
HFile
這是在磁盤上保存原始數(shù)據(jù)的實際的物理文件,是實際的存儲文件枫甲。StoreFile是以Hfile的形式存儲在HDFS的