一届巩、HBase核心概述
HBase(Hadoop Database)是一個基于Google BigTable論文設計的開源端幼、高可靠性、高性能疟位、可擴展的分布式存儲系統(tǒng)苔巨。HBase存儲引擎是通過LSM樹(Log-Structured Merge Tree)結構實現(xiàn)的版扩,底層數(shù)據(jù)存儲基于HDFS,原生的支持MapReduce作為計算引擎侄泽,具有高吞吐礁芦、低延時的讀寫特點。
1悼尾、數(shù)據(jù)模型
首先講一下HBase的數(shù)據(jù)模型柿扣。HBase數(shù)據(jù)存儲在 table 中,table 具有松散表結構(schema-free)闺魏,不需要預先定義好schema未状,只有在數(shù)據(jù)寫入時才須定義Column,理論上數(shù)據(jù)列可以無限多析桥。
HBase的列由列族(Column Family)和 列限定符(Column Qualifier)組成司草,以逗號分隔標識一個列。HBase數(shù)據(jù)是按Rowkey進行字典排序的泡仗,Rowkey相當于關系型數(shù)據(jù)庫的主鍵埋虹,數(shù)據(jù)寫入時必須指定Rowkey。HBase中的Rowkey娩怎、列族搔课、列限定符共同組成一個稱為Cell的存儲單元,Cell包含具體的數(shù)據(jù)峦树,以及用于區(qū)分Cell版本的 timestamp辣辫。
2、列族式存儲
HBase是面向列族存儲的魁巩。HBase每一列數(shù)據(jù)在底層是以 KV 形式存儲的急灭,針對一行數(shù)據(jù),如果其列族相同谷遂,那么這些列的數(shù)據(jù)是順序相鄰存放的葬馋,所以是看上去像是以列族為偽列進行列式存儲的,實際上并不是真正的列式存儲肾扰,而是面向列族存儲畴嘶,或者說Column Family級別列存。
3集晚、自動分區(qū)
HBase支持自動分區(qū)窗悯。HBase表在水平方向上根據(jù)Rowkey被劃分成多個Region,由[startkey,endkey)表示偷拔,Region是HBase讀寫可用性蒋院、分布式存儲和負載均衡的基本單元亏钩。Region分散在不同的RegionServer中,使得數(shù)據(jù)分片分布在整個集群欺旧。當Region達到一定大小時(hbase.hregion.max.filesize)就會自動分裂成兩個Region姑丑,達到自動分區(qū)的效果。
4辞友、單列索引
默認情況下HBase對Rowkey做了單列索引栅哀,所以HBase能通過Rowkey進行高效的隨機查詢或范圍查詢。相對來說称龙,HBase索引還是比較單一留拾,通過非Rowkey列查詢性能比較低,除非對非Rowkey列做二級索引(secondary index)鲫尊,目前二級索引方案大多是基于 HBase Coprocessor即協(xié)處理器實現(xiàn)间驮,比如Phoenix。
5马昨、刷寫與壓縮
由于HBase基于LSM Tree思想設計竞帽,新增變更的數(shù)據(jù)首先寫入 WAL(Write Ahead Log),然后會寫到Region的內存緩沖區(qū)MemStore中鸿捧,當MemStore大小達到一定閾值或滿足其他觸發(fā)條件時屹篓,數(shù)據(jù)會刷寫到磁盤(Flush)生成StoreFile(HFile),HFile是HBase底層數(shù)據(jù)的文件存儲格式匙奴。
隨著時間的推移堆巧,磁盤中會存在大量的HFile文件,文件過多會嚴重影響讀取HBase的性能泼菌,為了提高性能谍肤,HBase會做合并HFile文件(Compaction)操作,以減少文件個數(shù)哗伯,清理過期或刪除的數(shù)據(jù)荒揣。
二、HBase生態(tài)組件介紹
隨著HBase功能越來越完善焊刹,構建在HBase之上的生態(tài)環(huán)境也越來越健全系任,衍生了包括SQL,時序虐块,時空俩滥,以及圖等各個方面的項目:
三、HBase應用場景
HBase是一個存儲系統(tǒng)贺奠,也是一個NoSQL數(shù)據(jù)庫霜旧。由于HBase豐富的特性,加上自身的并發(fā)能力儡率、存儲能力與高效讀寫能力挂据,使得HBase有著比較廣泛的應用場景:
- 訂單/消息存儲:HBase可以支持金融航背、電信領域的訂單/賬單查詢,另外不少通信棱貌、消息同步的應用也構建在HBase之上。
- 用戶畫像:可以支持用戶畫像的存儲箕肃,螞蟻的風控就是構建在HBase之上婚脱。
- 對象存儲:不少頭條類、新聞類的的新聞勺像、網(wǎng)頁障贸、圖片存儲在HBase之中,一些病毒公司的病毒庫也是存儲在HBase之中吟宦。
- 時序數(shù)據(jù):HBase之上有OpenTSDB模塊篮洁,可以滿足時序類場景的需求。
- 時空數(shù)據(jù):主要是軌跡殃姓、氣象網(wǎng)格之類袁波,滴滴打車的軌跡數(shù)據(jù)主要存在HBase之中,另外在車聯(lián)網(wǎng)企業(yè)有不少數(shù)據(jù)存在HBase之中蜗侈。
- Cube分析:Kylin一個cube分析工具篷牌,底層的數(shù)據(jù)存儲在HBase之中,不少客戶自己基于離線計算構建的cube也存儲在hbase之中踏幻,滿足在線報表查詢的需求枷颊。
- Feeds流:高并發(fā)請求訪問,典型的場景就是朋友圈類似的應用该面。
- NewSQL:HBase之上有Phoenix的插件夭苗,可以滿足二級索引、SQL的需求隔缀,對接傳統(tǒng)數(shù)據(jù)需要SQL非事務的需求题造。
四、HBase2.0新特性介紹
2018年4月份HBase發(fā)布了2.0版本猾瘸,是HBase迄今為止非常重要的一個大版本晌梨,有很多值得關注的Features,下面列舉其中非常重要的幾個特性:
- Mob小對象存儲:可以高效的存儲100KB~10M中等大小對象须妻,能夠滿足一般文檔仔蝌、圖片的存儲。
- 讀寫鏈路的Offheap:引入OffHeap降低GC影響荒吏,優(yōu)化了讀寫鏈路延遲敛惊。
- Region Replica:為Region引入副本,提供高可用讀绰更,避免宕機影響瞧挤。
- In-Memory Compaction:內存先進行flush然后compaction锡宋,當達到一定閾值再flush到磁盤,減少了磁盤io同時提升了讀性能特恬。
- Assignment Manager V2:基于Procedure V2执俩,使得Region assign/unassign的速度大大提升,能夠更好的解決Region長時間RIT問題癌刽。
- 其他
五役首、總結
HBase是架構在HDFS之上面向列的分布式存儲系統(tǒng),在很多領域都有廣泛應用显拜,主要解決高并發(fā)衡奥、隨機讀寫的業(yè)務場景,適合海量數(shù)據(jù)的永久性存儲远荠。
國內很多知名公司如阿里矮固、騰訊、小米譬淳、滴滴档址、360等都在使用HBase,并有很好的應用實踐邻梆。后續(xù)介紹更多HBase技術細節(jié)辰晕。