Hbase數(shù)據(jù)模型及其架構(gòu)原理

HBase數(shù)據(jù)模型

邏輯上,HBase的數(shù)據(jù)模型同關(guān)系型數(shù)據(jù)庫很類似芍锦,數(shù)據(jù)存儲(chǔ)在一張表中竹勉,有行有列。但從HBase的底層物理存儲(chǔ)結(jié)構(gòu)(K-V)來看娄琉,HBase更像是一個(gè)multi-dimensional map次乓。

  • 邏輯結(jié)構(gòu)
hbase1.png
  • 物理結(jié)構(gòu)


    hbase2.png
  • 相關(guān)概念
  1. Name Space
    命名空間吓歇,類似于關(guān)系型數(shù)據(jù)庫的DatabBase概念,每個(gè)命名空間下有多個(gè)表票腰。HBase有兩個(gè)自帶的命名空間城看,分別是hbase和default,hbase中存放的是HBase內(nèi)置的表杏慰,default表是用戶默認(rèn)使用的命名空間测柠。
  2. Region
    類似于關(guān)系型數(shù)據(jù)庫的表概念。不同的是逃默,HBase定義表時(shí)只需要聲明列族即可鹃愤,不需要聲明具體的列。這意味著完域,往HBase寫入數(shù)據(jù)時(shí),字段可以動(dòng)態(tài)瘩将、按需指定吟税。因此,和關(guān)系型數(shù)據(jù)庫相比姿现,HBase能夠輕松應(yīng)對(duì)字段變更的場(chǎng)景肠仪。
  3. Row
    HBase表中的每行數(shù)據(jù)都由一個(gè)RowKey和多個(gè)Column(列)組成,數(shù)據(jù)是按照RowKey的字典順序存儲(chǔ)的备典,并且查詢數(shù)據(jù)時(shí)只能根據(jù)RowKey進(jìn)行檢索异旧,所以RowKey的設(shè)計(jì)十分重要。
  4. Column
    HBase中的每個(gè)列都由Column Family(列族)和Column Qualifier(列限定符)進(jìn)行限定提佣,例如info:name吮蛹,info:age。建表時(shí)拌屏,只需指明列族潮针,而列限定符無需預(yù)先定義。
  5. Time Stamp
    用于標(biāo)識(shí)數(shù)據(jù)的不同版本(version)倚喂,每條數(shù)據(jù)寫入時(shí)每篷,如果不指定時(shí)間戳,系統(tǒng)會(huì)自動(dòng)為其加上該字段端圈,其值為寫入HBase的時(shí)間焦读。
  6. Cell
    由{rowkey, column Family:column Qualifier, time Stamp} 唯一確定的單元。cell中的數(shù)據(jù)是沒有類型的舱权,全部是字節(jié)數(shù)組形式存貯

架構(gòu)原理

hbase3.jpg
  1. Region Server
    Region Server為 Region的管理者矗晃,其實(shí)現(xiàn)類為HRegionServer,主要作用如下:
    對(duì)于數(shù)據(jù)的操作:get, put, delete刑巧;
    對(duì)于Region的操作:splitRegion喧兄、compactRegion无畔。
  2. Master
    Master是所有Region Server的管理者,其實(shí)現(xiàn)類為HMaster吠冤,主要作用如下:
    對(duì)于表的操作:create, delete, alter
    對(duì)于RegionServer的操作:分配regions到每個(gè)RegionServer浑彰,監(jiān)控每個(gè)RegionServer的狀態(tài),負(fù)載均衡和故障轉(zhuǎn)移拯辙。
  3. ZK
    HBase通過Zookeeper來做Master的高可用郭变、RegionServer的監(jiān)控、元數(shù)據(jù)的入口以及集群配置的維護(hù)等工作涯保。
  4. HDFS
    HDFS為HBase提供最終的底層數(shù)據(jù)存儲(chǔ)服務(wù)诉濒,同時(shí)為HBase提供高可用的支持
  5. StoreFile
    保存實(shí)際數(shù)據(jù)的物理文件,StoreFile以HFile的形式存儲(chǔ)在HDFS上夕春。每個(gè)Store會(huì)有一個(gè)或多個(gè)StoreFile(HFile)未荒,數(shù)據(jù)在每個(gè)StoreFile中都是有序的。
  6. MemStore
    寫緩存及志,由于HFile中的數(shù)據(jù)要求是有序的疚察,所以數(shù)據(jù)是先存儲(chǔ)在MemStore中凿蒜,排好序后毅哗,等到達(dá)刷寫時(shí)機(jī)才會(huì)刷寫到HFile剪返,每次刷寫都會(huì)形成一個(gè)新的HFile。
  7. WAL
    由于數(shù)據(jù)要經(jīng)MemStore排序后才能刷寫到HFile倚搬,但把數(shù)據(jù)保存在內(nèi)存中會(huì)有很高的概率導(dǎo)致數(shù)據(jù)丟失冶共,為了解決這個(gè)問題,數(shù)據(jù)會(huì)先寫在一個(gè)叫做Write-Ahead logfile(HLog)的文件中每界,然后再寫入MemStore中捅僵。所以在系統(tǒng)出現(xiàn)故障的時(shí)候,數(shù)據(jù)可以通過這個(gè)日志文件重建盆犁。

寫數(shù)據(jù)流程

hbase4.png

寫流程:

  1. Client先訪問zookeeper命咐,獲取hbase:meta表位于哪個(gè)Region Server。
  2. 訪問對(duì)應(yīng)的Region Server谐岁,獲取hbase:meta表醋奠,根據(jù)讀請(qǐng)求的namespace:table/rowkey,查詢出目標(biāo)數(shù)據(jù)位于哪個(gè)Region Server中的哪個(gè)Region中伊佃。并將該table的region信息以及meta表的位置信息緩存在客戶端的meta cache窜司,方便下次訪問。
  3. 與目標(biāo)Region Server進(jìn)行通訊航揉;
  4. 將數(shù)據(jù)順序?qū)懭耄ㄗ芳樱┑絎AL塞祈;
  5. 將數(shù)據(jù)寫入對(duì)應(yīng)的MemStore,數(shù)據(jù)會(huì)在MemStore進(jìn)行排序帅涂;
  6. 向客戶端發(fā)送ack议薪;
  7. 等達(dá)到MemStore的刷寫時(shí)機(jī)后尤蛮,將數(shù)據(jù)刷寫到HFile;
  • MemStore Flush
hbase5.png

MemStore刷寫時(shí)機(jī):

  1. 當(dāng)某個(gè)memstroe的大小達(dá)到了hbase.hregion.memstore.flush.size(默認(rèn)值128M),其所在region的所有memstore都會(huì)刷寫斯议。
    當(dāng)memstore的大小達(dá)到了
    hbase.hregion.memstore.flush.size(默認(rèn)值128M) *hbase.hregion.memstore.block.multiplier(默認(rèn)值4)時(shí)产捞,會(huì)阻止繼續(xù)往該memstore寫數(shù)據(jù)。

  2. 當(dāng)region server中memstore的總大小達(dá)到
    java_heapsize * hbase.regionserver.global.memstore.size(默認(rèn)值0.4) * hbase.regionserver.global.memstore.size.upper.limit(默認(rèn)值0.95)哼御,
    region會(huì)按照其所有memstore的大小順序(由大到信髁佟)依次進(jìn)行刷寫。直到region server中所有memstore的總大小減小到hbase.regionserver.global.memstore.size.lower.limit以下恋昼。

    當(dāng)region server中memstore的總大小達(dá)到
    java_heapsize * hbase.regionserver.global.memstore.size(默認(rèn)值0.4)時(shí)看靠,會(huì)阻止繼續(xù)往所有的memstore寫數(shù)據(jù)。

  3. 到達(dá)自動(dòng)刷寫的時(shí)間液肌,也會(huì)觸發(fā)memstore flush挟炬。
    自動(dòng)刷新的時(shí)間間隔由該屬性進(jìn)行配置hbase.regionserver.optionalcacheflushinterval(默認(rèn)1小時(shí))。

    當(dāng)WAL文件的數(shù)量超過hbase.regionserver.max.logs矩屁,region會(huì)按照時(shí)間順序依次進(jìn)行刷寫辟宗,直到WAL文件數(shù)量減小到hbase.regionserver.max.log以下(該屬性名已經(jīng)廢棄,現(xiàn)無需手動(dòng)設(shè)置吝秕,最大值為32)

讀數(shù)據(jù)流程

hbase7.png

讀流程:

  1. Client先訪問zookeeper,獲取hbase:meta表位于哪個(gè)Region Server空幻。
  2. 訪問對(duì)應(yīng)的Region Server烁峭,獲取hbase:meta表,根據(jù)讀請(qǐng)求的namespace:table/rowkey秕铛,查詢出目標(biāo)數(shù)據(jù)位于哪個(gè)Region Server中的哪個(gè)Region中约郁。并將該table的region信息以及meta表的位置信息緩存在客戶端的meta cache,方便下次訪問但两。
  3. 與目標(biāo)Region Server進(jìn)行通訊鬓梅;
  4. 分別在Block Cache(讀緩存),MemStore和Store File(HFile)中查詢目標(biāo)數(shù)據(jù)谨湘,并將查到的所有數(shù)據(jù)進(jìn)行合并绽快。此處所有數(shù)據(jù)是指同一條數(shù)據(jù)的不同版本(time stamp)或者不同的類型(Put/Delete)。
  5. 將從文件中查詢到的數(shù)據(jù)塊(Block紧阔,HFile數(shù)據(jù)存儲(chǔ)單元坊罢,默認(rèn)大小為64KB)緩存到Block Cache。
    將合并后的最終結(jié)果返回給客戶端
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末擅耽,一起剝皮案震驚了整個(gè)濱河市活孩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌乖仇,老刑警劉巖憾儒,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件询兴,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡起趾,警方通過查閱死者的電腦和手機(jī)诗舰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阳掐,“玉大人始衅,你說我怎么就攤上這事$员#” “怎么了汛闸?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)艺骂。 經(jīng)常有香客問我诸老,道長(zhǎng),這世上最難降的妖魔是什么钳恕? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任别伏,我火速辦了婚禮,結(jié)果婚禮上忧额,老公的妹妹穿的比我還像新娘厘肮。我一直安慰自己,他們只是感情好睦番,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布类茂。 她就那樣靜靜地躺著,像睡著了一般托嚣。 火紅的嫁衣襯著肌膚如雪巩检。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天示启,我揣著相機(jī)與錄音兢哭,去河邊找鬼。 笑死夫嗓,一個(gè)胖子當(dāng)著我的面吹牛迟螺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播啤月,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼煮仇,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了谎仲?” 一聲冷哼從身側(cè)響起浙垫,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后夹姥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體杉武,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年辙售,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了轻抱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡旦部,死狀恐怖祈搜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情士八,我是刑警寧澤容燕,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站婚度,受9級(jí)特大地震影響蘸秘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蝗茁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一醋虏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧哮翘,春花似錦颈嚼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至佩研,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間霞揉,已是汗流浹背旬薯。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留适秩,地道東北人绊序。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像秽荞,于是被迫代替她去往敵國(guó)和親骤公。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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