一峡蟋、Hbase原理
邏輯視圖
Hbase 表的特點
LSM三層存儲
hbase會將數(shù)據(jù)先寫到內存中坟桅,內存滿了會將數(shù)據(jù)刷寫到文件中。
但是如果數(shù)據(jù)量大的話蕊蝗,時間一長仅乓,就會有很多次的刷寫,帶來大量的磁盤操作的IO蓬戚。這個問題怎么解夸楣?
Hbase會定期將磁盤上的小文件進行合并,合并成大文件。這樣的話裕偿,小文件會慢慢變成大文件洞慎,這樣的大文件就適合存儲在HDFS中了。
就跟洗襪子一樣嘿棘,襪子先放盆里劲腿,盆滿了放桶里面,桶滿了才去洗衣機洗鸟妙;Hbase是數(shù)據(jù)先寫內存焦人,到一定大小寫到文件中,將多個小文件合并成大文件后再寫入到HDFS中進行實際存儲重父。
數(shù)據(jù)一開始存在內存中花椭,如果機器突然掛了,數(shù)據(jù)不就丟失了么房午,這個問題Hbase是怎么解的矿辽?
這里Hbase采用了跟HDFS類似的原理,他運用到了wal預寫日志的思想:hbase也會將數(shù)據(jù)的操作先寫日志郭厌,然后存到內存袋倔,哪天機器掛了,內存丟了折柠,還能從WAL日志中將數(shù)據(jù)恢復宾娜。
Hbase的WAL機制通過日志恢復策略,保證了內存中的數(shù)據(jù)不會丟失扇售。
Hbase集群架構
一個 HBase 集群一般由一個 Master 和多個 RegionServer 組成前塔。
- 客戶端庫:可以通過 HBase 提供的各式語言API 庫訪問集群。
- API 庫也會維護一個本地緩存來加快對 HBase 對訪問承冰,比如緩存中記錄著 Region 的位置信息华弓。
- Maste 節(jié)點:主要為各個 RegionServer 分配 Region,負責 RegionServer 對負載均衡困乒,管理用戶對于 Table 對 CRUD 操作寂屏。
- RegionServer:維護 Region,處理對這些 Region 對IO 請求顶燕,負責切分在運行過程中變過大的 Region凑保。
下圖是Hbase集群中的組件圖:
下圖是Hbase的架構圖冈爹,雙HMaster組成高可用涌攻,HRegionServer存儲數(shù)據(jù)。
hbase的架構似乎也是master-slave架構频伤,和hdfs有點像恳谎,HMaster是用來管理集群,HRegionServer是真正存儲數(shù)據(jù)的地方。
Hbase在數(shù)據(jù)查詢和寫入的時候因痛,其實并不是像hdfs那樣詢問HMaster婚苹。在hbase中,每一張表都會有元信息鸵膏,這些信息也是被存儲為hbase表膊升,稱為元信息表,也叫meta表谭企,這是一種系統(tǒng)表廓译。所以hbase總是先查詢meta表,然后就知道數(shù)據(jù)存儲在哪個HRegionServer上了债查。
既然meta表也是存儲在hbase上非区,那么hbase又如何知道m(xù)eta表存在哪個HRegionServer上呢?這豈不是一個雞生蛋蛋生雞的問題盹廷?
meta表是hbase表征绸,是指meta表也是用rowkey和value的鍵值存儲,但是并沒有說meta表在hbase上啊管怠。其實meta表不是存儲在HRegionServer上排惨,而是存儲在那個分布式協(xié)調服務zookeeper上面。
所以meta表其實是在一個固定地方讀取辕宏,然后根據(jù)meta表就知道數(shù)據(jù)在哪個HRegionServer上砾莱。但是zookeeper又是啥呢腊瑟?
zookeeper是分布式系統(tǒng)中非常重要的組件聚假,主要用于分布式系統(tǒng)間的協(xié)調選主膘格,還有一些公共的集群元信息的存儲纱控。
Hbase 中的Master有什么作用甜害?
HMaster的任務相對不繁重,但是卻比較重要主慰,它主要是通過調整和管理Region分布來實現(xiàn)HRegionServer的負載均衡闹获。
HRegionServer架構
Region是hbase在rowkey上的切分,每個Region都可以通過startKey和endKey來確定rowkey的范圍,一個HRegionServer上可能會有多個Region。
把Rowkey分成幾塊,每一塊會形成一個Region鹊汛,每一個Region分布在一個RegionServer上刁憋。
表的橫向切分
- Table中所有的行都是按照row key的字典序排列的。例如晦譬,rowkey 1,2,10的排列順序為1蛔添,10凶硅,2氢妈。
- Table在行的方向上分為多個region首量。
- Region具有最大值壮吩,達到閾值會等分為兩個region。
- Region是Hbase實現(xiàn)橫向擴展和負載均衡功能的基本單元加缘,不同的Region分布到不同的RegionServer鸭叙,Region與RegionServer之間是多對多的關系。
數(shù)據(jù)是根據(jù)rowkey和一定的哈希規(guī)則拣宏,分散到不同的Region上面沈贝,而Region又是屬于某一個HRegionServer上的。通過這里其實可以得出rowkey設計的另一個原則勋乾,就是散列性宋下,rowkey的頭幾個字母,最好不要是一樣的辑莫,不然會分布在同一個HRegionServer上面杨凑,導致這個HRegionServer的負載非常高,累死累活摆昧,其他HRegionServer卻沒事干撩满。一般可以根據(jù)一定規(guī)則算一個數(shù)據(jù)的摘要,比如md5绅你,把md5的頭幾位拼在rowkey的前面伺帘。
下圖是RegionServer中的主要組件及其架構圖:
一個 Region 是由一個或多個 Store 組成。每一個 Store 其實就是一個列族忌锯。每個Store 又是由一個 memStore 和 0 個或者多個 storeFile 組成伪嫁。memStore 是存儲在內存中,是LSM中的第一層偶垮,storeFile 是存儲在 HDFS 中张咳,這里StoreFile只是一個名字帝洪,它是以HFile的格式存儲在hdfs上,HFile是一個存儲格式脚猾,在新版本的HFile存儲格式中葱峡,它就是一個類似B+樹的索引索引形式。數(shù)據(jù)都會先寫入memStore龙助,一旦 memStore 超過給的的最大值之后砰奕,HBase 就會將memStore 持久化為 storeFile。Hlog是借鑒了之前提到的WAL的思想提鸟,防止機器掛掉以后军援,memStore內存中的文件丟失。
Hbase讀寫流程
Hbase寫流程
1称勋、hbase client要寫輸入了胸哥,先從zookeeper中拿到meta表信息,根據(jù)數(shù)據(jù)的rowkey找到應該往哪個RegionServer寫
2赡鲜、然后hbase會將數(shù)據(jù)寫入對應RegionServer的內存MemStore中烘嘱,同時記錄操作日志W(wǎng)AL
3、當MemStore超過一定閾值蝗蛙,就會將內存MemStore中的數(shù)據(jù)刷寫到硬盤上蝇庭,形成StoreFile
4、在觸發(fā)了一定條件的時候捡硅,小的StoreFile會進行合并哮内,變成大的StoreFile,有利于hdfs存儲
Hmaster的作用是什么壮韭?
當大量rowkey相近的數(shù)據(jù)都被分配到一個Region中北发,導致這個Region數(shù)據(jù)過大的時候,Region進行拆分喷屋,HMaster會對拆分后的Region重新分配RegionServer琳拨,這是HMaster的負載均衡策略。
Hbase讀流程
1屯曹、hbase client要讀數(shù)據(jù)了狱庇,先從zookeeper中拿到meta表信息,根據(jù)要查的rowkey找到對應的數(shù)據(jù)在哪些RegionServer上
2恶耽、分別在這些RegionServer上根據(jù)列簇進行StoreFile和MemStore的查找密任,得到很多key-value結構的數(shù)據(jù)
3、根據(jù)數(shù)據(jù)的版本找到最新數(shù)據(jù)進行返回
二偷俭、Hbase的優(yōu)缺點與適用場景分析
優(yōu)點:
- 十萬行浪讳、百萬類的海量數(shù)據(jù)存儲
- 支持百萬級別高并發(fā)寫入
- 支持實時查詢
- 適合稀疏數(shù)據(jù)的存儲
缺點:
- Hbase對于事務的支持比mysql差多了。
OLAP VS OLTP
- OLTP應用做聯(lián)機事務處理應用涌萤,就是類似銀行轉賬類的業(yè)務淹遵,對于事務要求比較高口猜,適合mysql這一類的數(shù)據(jù)庫;
- OLAP應用叫聯(lián)機分析處理應用透揣,比如推薦系統(tǒng)济炎,是在收集了大量用戶行為后進行分析,再得出結論的應用淌实,主要側重分析,對事務要求非常低猖腕,適合hbase這一類的數(shù)據(jù)庫拆祈。
三、總結
1倘感、hbase是列式存儲放坏,和mysql的行式存儲不一樣
2、hbase中有列簇概念老玛,同一個列簇下的列存儲在一起淤年,在Region的一個StoreFile中
3、hbase是按照rowkey進行查找蜡豹,要查詢的字段要想辦法放到rowkey中
4麸粮、hbase內部使用LSM三層模型進行存儲,數(shù)據(jù)先寫到內存MemStore中镜廉,內存達到一定閾值再刷寫到硬盤StoreFile中弄诲,再滿足一定條件時,小的StoreFile會合并為大的StoreFile
5娇唯、hbase適合OLAP類的應用