第五課 Hbase存儲詳解

Hbase是bigtable的開源山寨版本。是建立的hdfs之上滔灶,提供高可靠性普碎、高性能、列存儲录平、可伸縮麻车、實時讀寫的數(shù)據(jù)庫系統(tǒng)缀皱。

它介于nosql和RDBMS之間,僅能通過主鍵(row key)和主鍵的range來檢索數(shù)據(jù)动猬,僅支持單行事務(wù)啤斗。主要用來存儲非結(jié)構(gòu)化和半結(jié)構(gòu)化的松散數(shù)據(jù)。

與hadoop一樣赁咙,Hbase目標(biāo)主要依靠橫向擴(kuò)展钮莲,通過不斷增加廉價的商用服務(wù)器,來增加計算和存儲能力彼水。

Hbase中的表一般有這樣的特點:

1 大:一個表可以有上億行崔拥,上百萬列

2 面向列:面向列(族)的存儲和權(quán)限控制,列(族)獨立檢索凤覆。

3 稀疏:對于為空(null)的列链瓦,并不占用存儲空間,因此盯桦,表可以設(shè)計的非常稀疏慈俯。

下面一幅圖是Hbase在Hadoop Ecosystem中的位置。

image.png

二拥峦、邏輯視圖

Hbase以表的形式存儲數(shù)據(jù)贴膘。表有行和列組成。列劃分為若干個列族(row family)


image.png

Row Key

與nosql數(shù)據(jù)庫們一樣,row key是用來檢索記錄的主鍵事镣。訪問Hbase table中的行步鉴,只有三種方式:

1 通過單個row key訪問

2 通過row key的range

3 全表掃描

Row key行鍵 (Row key)可以是任意字符串(最大長度是 64KB,實際應(yīng)用中長度一般為 10-100bytes)璃哟,在Hbase內(nèi)部氛琢,row key保存為字節(jié)數(shù)組。

存儲時随闪,數(shù)據(jù)按照Row key的字典序(byte order)排序存儲阳似。設(shè)計key時,要充分排序存儲這個特性铐伴,將經(jīng)常一起讀取的行存儲放到一起撮奏。

注意:

字典序?qū)nt排序的結(jié)果是1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,…,9,91,92,93,94,95,96,97,98,99。要保持整形的自然序当宴,行鍵必須用0作左填充畜吊。

行的一次讀寫是原子操作 (不論一次讀寫多少列)。

列族

Hbase表中的每個列户矢,都?xì)w屬與某個列族玲献。列族是表的chema的一部分(而列不是),必須在使用表之前定義。列名都以列族作為前綴捌年。例如courses:history瓢娜,courses:math

都屬于courses 這個列族。

時間戳

Hbase中通過row和columns確定的為一個存貯單元稱為cell礼预。每個 cell都保存著同一份數(shù)據(jù)的多個版本眠砾。版本通過時間戳來索引。時間戳的類型是 64位整型托酸。時間戳可以由Hbase(在數(shù)據(jù)寫入時自動 )賦值褒颈,此時時間戳是精確到毫秒的當(dāng)前系統(tǒng)時間。時間戳也可以由客戶顯式賦值获高。如果應(yīng)用程序要避免數(shù)據(jù)版本沖突哈肖,就必須自己生成具有唯一性的時間戳。每個 cell中念秧,不同版本的數(shù)據(jù)按照時間倒序排序淤井,即最新的數(shù)據(jù)排在最前面。

Cell

由{row key, column, version} 唯一確定的單元摊趾。cell中的數(shù)據(jù)是沒有類型的币狠,全部是字節(jié)碼形式存貯。

三砾层、物理存儲

1 已經(jīng)提到過漩绵,Table中的所有行都按照row key的字典序排列。

2 Table 在行的方向上分割為多個Hregion肛炮。

image.png

3 region按大小分割的止吐,每個表一開始只有一個region,隨著數(shù)據(jù)不斷插入表侨糟,region不斷增大碍扔,當(dāng)增大到一個閥值的時候,Hregion就會等分會兩個新的Hregion秕重。當(dāng)table中的行不斷增多不同,就會有越來越多的Hregion。

image.png

4 HRegion是Hbase中分布式存儲和負(fù)載均衡的最小單元溶耘。最小單元就表示不同的Hregion可以分布在不同的HRegion server上二拐。但一個Hregion是不會拆分到多個server上的。


image.png
image.png

5 HRegion雖然是分布式存儲的最小單元凳兵,但并不是存儲的最小單元百新。

事實上,HRegion由一個或者多個Store組成庐扫,每個store保存一個columns family吟孙。

每個Strore又由一個memStore和0至多個StoreFile組成澜倦。如圖:

StoreFile以HFile格式保存在HDFS上聚蝶。

image.png

Hbase基本組件說明:

Client

?包含訪問HBase的接口杰妓,并維護(hù)cache來加快對HBase的訪問,比如region的位置信息

Master

?為Region server分配region

?負(fù)責(zé)Region server的負(fù)載均衡

?發(fā)現(xiàn)失效的Region server并重新分配其上的region

?管理用戶對table的增刪改查操作

Region Server

?Regionserver維護(hù)region碘勉,處理對這些region的IO請求

?Regionserver負(fù)責(zé)切分在運行過程中變得過大的region

Zookeeper作用

?通過選舉巷挥,保證任何時候,集群中只有一個master验靡,Master與RegionServers 啟動時會向ZooKeeper注冊

?存貯所有Region的尋址入口

?實時監(jiān)控Region server的上線和下線信息倍宾。并實時通知給Master

?存儲HBase的schema和table元數(shù)據(jù)

?默認(rèn)情況下,HBase 管理ZooKeeper 實例胜嗓,比如高职, 啟動或者停止ZooKeeper

?Zookeeper的引入使得Master不再是單點故障

image.png

Write-Ahead-Log(WAL)HLog

image.png

該機(jī)制用于數(shù)據(jù)的容錯和恢復(fù):

每個HRegionServer中都有一個HLog對象,HLog是一個實現(xiàn)Write Ahead Log的類辞州,在每次用戶操作寫入MemStore的同時怔锌,也會寫一份數(shù)據(jù)到HLog文件中(HLog文件格式見后續(xù)),HLog文件定期會滾動出新的变过,并刪除舊的文件(已持久化到StoreFile中的數(shù)據(jù))埃元。當(dāng)HRegionServer意外終止后,HMaster會通過Zookeeper感知到媚狰,HMaster首先會處理遺留的 HLog文件岛杀,將其中不同Region的Log數(shù)據(jù)進(jìn)行拆分,分別放到相應(yīng)region的目錄下崭孤,然后再將失效的region重新分配类嗤,領(lǐng)取 到這些region的HRegionServer在Load Region的過程中,會發(fā)現(xiàn)有歷史HLog需要處理辨宠,因此會Replay HLog中的數(shù)據(jù)到MemStore中遗锣,然后flush到StoreFiles,完成數(shù)據(jù)恢復(fù)

HBase容錯性
Master容錯:Zookeeper重新選擇一個新的Master
?無Master過程中彭羹,數(shù)據(jù)讀取仍照常進(jìn)行黄伊;
?無master過程中,region切分派殷、負(fù)載均衡等無法進(jìn)行还最;
RegionServer容錯:定時向Zookeeper匯報心跳,如果一旦時間內(nèi)未出現(xiàn)心跳毡惜,Master將該RegionServer上的Region重新分配到其他RegionServer上拓轻,失效服務(wù)器上“預(yù)寫”日志由主服務(wù)器進(jìn)行分割并派送給新的RegionServer
Zookeeper容錯:Zookeeper是一個可靠地服務(wù),一般配置3或5個Zookeeper實例
Region定位流程:

image.png

尋找RegionServer

ZooKeeper--> -ROOT-(單Region)--> .META.--> 用戶表

-ROOT-
?表包含.META.表所在的region列表经伙,該表只會有一個Region扶叉;

?Zookeeper中記錄了-ROOT-表的location勿锅。

.META.

?表包含所有的用戶空間region列表,以及RegionServer的服務(wù)器地址枣氧。

HBase存儲數(shù)據(jù)其底層使用的是HDFS來作為存儲介質(zhì)溢十,HBase的每一張表對應(yīng)的HDFS目錄上的一個文件夾,文件夾名以HBase表進(jìn)行命名(如果沒有使用命名空間达吞,則默認(rèn)在default目錄下)张弛,在表文件夾下存放在若干個Region命名的文件夾,Region文件夾中的每個列簇也是用文件夾進(jìn)行存儲的酪劫,每個列簇中存儲就是實際的數(shù)據(jù)吞鸭,以HFile的形式存在。路徑格式如下:

/hbase/data/default/<tbl_name>/<region_id>/<cf>/<hfile_id>

謝謝

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末覆糟,一起剝皮案震驚了整個濱河市刻剥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌滩字,老刑警劉巖造虏,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異踢械,居然都是意外死亡酗电,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門内列,熙熙樓的掌柜王于貴愁眉苦臉地迎上來撵术,“玉大人,你說我怎么就攤上這事话瞧∧塾耄” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵交排,是天一觀的道長划滋。 經(jīng)常有香客問我,道長埃篓,這世上最難降的妖魔是什么处坪? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮架专,結(jié)果婚禮上同窘,老公的妹妹穿的比我還像新娘。我一直安慰自己部脚,他們只是感情好想邦,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著委刘,像睡著了一般丧没。 火紅的嫁衣襯著肌膚如雪鹰椒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天呕童,我揣著相機(jī)與錄音漆际,去河邊找鬼。 笑死拉庵,一個胖子當(dāng)著我的面吹牛灿椅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钞支,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼操刀!你這毒婦竟也來了烁挟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤撼嗓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后且警,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體礁遣,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡斑芜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了祟霍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡沸呐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出崭添,到底是詐尸還是另有隱情寓娩,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布呼渣,位于F島的核電站棘伴,受9級特大地震影響徙邻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缰犁,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一怖糊、第九天 我趴在偏房一處隱蔽的房頂上張望颇象。 院中可真熱鬧,春花似錦遣钳、人聲如沸扰魂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蒋畜。三九已至撞叽,卻和暖如春姻成,著一層夾襖步出監(jiān)牢的瞬間愿棋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工才睹, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人砂竖。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓鹃答,卻偏偏與公主長得像,于是被迫代替她去往敵國和親测摔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 參考:http://www.reibang.com/p/569106a3008f 最近在逐步跟進(jìn)Hbase的相關(guān)...
    博弈史密斯閱讀 846評論 1 1
  • 最近在逐步跟進(jìn)Hbase的相關(guān)工作浙于,由于之前對Hbase并不怎么了解挟纱,因此系統(tǒng)地學(xué)習(xí)了下Hbase,為了加深對Hb...
    飛鴻無痕閱讀 50,182評論 19 271
  • 本文首先簡單介紹了HBase,然后重點講述了HBase的高并發(fā)和實時處理數(shù)據(jù) 紊服、HBase數(shù)據(jù)模型胸竞、HBase物理...
    達(dá)微閱讀 2,726評論 1 13
  • 簡介 HBase是高可靠性,高性能参萄,面向列,可伸縮的分布式存儲系統(tǒng)讹挎,利用HBase技術(shù)可在廉價PC Serve...
    九世的貓閱讀 2,172評論 1 6
  • 一筒溃、簡介 Hbase:全名Hadoop DataBase马篮,是一種開源的铡羡,可伸縮的,嚴(yán)格一致性(并非最終一致性)的分...
    菜鳥小玄閱讀 2,364評論 0 12