NoSQL-Hbase-實現(xiàn)原理

一峡蟋、Hbase原理

邏輯視圖

Hbase 表的特點


image.png

LSM三層存儲

hbase會將數(shù)據(jù)先寫到內存中坟桅,內存滿了會將數(shù)據(jù)刷寫到文件中。

image.png

但是如果數(shù)據(jù)量大的話蕊蝗,時間一長仅乓,就會有很多次的刷寫,帶來大量的磁盤操作的IO蓬戚。這個問題怎么解夸楣?

Hbase會定期將磁盤上的小文件進行合并,合并成大文件。這樣的話裕偿,小文件會慢慢變成大文件洞慎,這樣的大文件就適合存儲在HDFS中了。

就跟洗襪子一樣嘿棘,襪子先放盆里劲腿,盆滿了放桶里面,桶滿了才去洗衣機洗鸟妙;Hbase是數(shù)據(jù)先寫內存焦人,到一定大小寫到文件中,將多個小文件合并成大文件后再寫入到HDFS中進行實際存儲重父。

image.png

數(shù)據(jù)一開始存在內存中花椭,如果機器突然掛了,數(shù)據(jù)不就丟失了么房午,這個問題Hbase是怎么解的矿辽?
這里Hbase采用了跟HDFS類似的原理,他運用到了wal預寫日志的思想:hbase也會將數(shù)據(jù)的操作先寫日志郭厌,然后存到內存袋倔,哪天機器掛了,內存丟了折柠,還能從WAL日志中將數(shù)據(jù)恢復宾娜。

image.png

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集群中的組件圖:


image.png

下圖是Hbase的架構圖冈爹,雙HMaster組成高可用涌攻,HRegionServer存儲數(shù)據(jù)。


image.png

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上刁憋。

image.png

表的橫向切分

  • 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中的主要組件及其架構圖:


image.png
image.png

一個 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存儲

image.png

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ù)進行返回


image.png

二偷俭、Hbase的優(yōu)缺點與適用場景分析

優(yōu)點:

  • 十萬行浪讳、百萬類的海量數(shù)據(jù)存儲
  • 支持百萬級別高并發(fā)寫入
  • 支持實時查詢
  • 適合稀疏數(shù)據(jù)的存儲

缺點:

  1. Hbase對于事務的支持比mysql差多了。

OLAP VS OLTP

  1. OLTP應用做聯(lián)機事務處理應用涌萤,就是類似銀行轉賬類的業(yè)務淹遵,對于事務要求比較高口猜,適合mysql這一類的數(shù)據(jù)庫;
  2. 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類的應用

四齐遵、參考資料

  1. 你應該知道的 HBase 基礎,都在這兒了
  2. 【生活現(xiàn)場】從洗襪子到hbase存儲原理解析
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末塔插,一起剝皮案震驚了整個濱河市梗摇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌想许,老刑警劉巖伶授,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異流纹,居然都是意外死亡谎砾,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門捧颅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來景图,“玉大人,你說我怎么就攤上這事碉哑≈勘遥” “怎么了亮蒋?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長妆毕。 經(jīng)常有香客問我慎玖,道長,這世上最難降的妖魔是什么笛粘? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任趁怔,我火速辦了婚禮,結果婚禮上薪前,老公的妹妹穿的比我還像新娘润努。我一直安慰自己,他們只是感情好示括,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布铺浇。 她就那樣靜靜地躺著,像睡著了一般垛膝。 火紅的嫁衣襯著肌膚如雪鳍侣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天吼拥,我揣著相機與錄音倚聚,去河邊找鬼。 笑死凿可,一個胖子當著我的面吹牛秉沼,可吹牛的內容都是我干的。 我是一名探鬼主播矿酵,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼唬复,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了全肮?” 一聲冷哼從身側響起敞咧,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎辜腺,沒想到半個月后休建,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡评疗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年测砂,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片百匆。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡砌些,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情存璃,我是刑警寧澤仑荐,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站纵东,受9級特大地震影響粘招,放射性物質發(fā)生泄漏。R本人自食惡果不足惜偎球,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一洒扎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧衰絮,春花似錦袍冷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽子檀。三九已至镊掖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間褂痰,已是汗流浹背亩进。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留缩歪,地道東北人归薛。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像匪蝙,于是被迫代替她去往敵國和親主籍。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345