HBase基礎(chǔ)知識(shí)

簡(jiǎn)介

HBase 是一個(gè)基于HDFS 的面向列的分布式數(shù)據(jù)庫,屬于非關(guān)系型數(shù)據(jù)庫的一種浓瞪。

HBase 本質(zhì)上只有插入操作股耽,更新和刪除都是使用插入方式完成的,這是由其底層 HDFS 的流式訪問特性(一次寫入纠拔、多次讀取)決定的泛豪。

HBase在更新時(shí)總會(huì)插入一個(gè)帶時(shí)間戳的新行稠诲,而刪除時(shí)則插入一個(gè)帶有刪除標(biāo)記的新行侦鹏。每次插入都有一個(gè)時(shí)間戳的標(biāo)記,每次都是一個(gè)新的版本臀叙,Hbase會(huì)保留一定數(shù)據(jù)的版本(自行設(shè)置)略水。如果查詢時(shí)提供時(shí)間戳則返回距離該時(shí)間最近的版本,否則返回離現(xiàn)在最近的版本劝萤。

一渊涝、 HBase體系結(jié)構(gòu)

HBase采用Master/slaves 的主從服務(wù)器結(jié)構(gòu),由一個(gè)HMaste服務(wù)器和多個(gè)HRegion Server服務(wù)器組成稳其,所有的服務(wù)器都通過Zoo Keeper協(xié)調(diào)并處理運(yùn)行期間遇到的錯(cuò)誤驶赏。

HMaster負(fù)責(zé)管理所有的HRegion Server,各HRegion Server負(fù)責(zé)存儲(chǔ)許多HRegion既鞠,每一個(gè)HRegion是對(duì)HBase邏輯表的分塊煤傍。

HBase體系結(jié)構(gòu)

1. HRegion

HBase使用表存儲(chǔ)數(shù)據(jù),表由行和列組成嘱蛋。但是當(dāng)表超過設(shè)定值大小時(shí)蚯姆,Hbase會(huì)自動(dòng)將表劃分不同的區(qū)域,每個(gè)區(qū)域被稱為HRegion洒敏。

  • HRegion是集群上分布式存儲(chǔ)和負(fù)責(zé)均衡的最小單位龄恋,類似于HDFS中文件與文件塊的概念。

  • 一個(gè)HRegion保存一個(gè)表中連續(xù)的數(shù)據(jù)凶伙,通過表名及主鍵來區(qū)分每一個(gè)HRegion郭毕。

  • 最開始一個(gè)表只有一個(gè)HRegion,隨著HRegion增大函荣,超出設(shè)定閾值显押,會(huì)分裂成兩個(gè)大小基本相同的HRegion,稱為HRegion分裂傻挂。

region分裂.png
  • 每個(gè)HRegion由HStore組成乘碑,HStore由兩部分組成:Mem Store和Store File,用戶寫入的數(shù)據(jù)首先放入Mem Store金拒,當(dāng)Mem Store滿了以后再刷入Store File兽肤。

  • Store File 是 HBase的最小存儲(chǔ)單位,底層最終由HFile實(shí)現(xiàn)绪抛。HFile是鍵值對(duì)數(shù)據(jù)存儲(chǔ)的格式资铡,實(shí)質(zhì)是HDFS的二進(jìn)制文件。

2. HRegion Server

HRegion Server負(fù)責(zé)響應(yīng)客戶端IO請(qǐng)求幢码,向HDFS中讀寫數(shù)據(jù)笤休,一臺(tái)機(jī)器上只運(yùn)行一個(gè)HRegion Server。HRegion Server包含兩個(gè)部分:HLog 和 HRegion蛤育。

  • HLog用于存儲(chǔ)數(shù)據(jù)日志宛官,實(shí)質(zhì)是HDFS的Sequence File。到達(dá)HRegion的寫操作首先追加到日志中瓦糕,才被加入到內(nèi)存中的Mem Store底洗。

  • HLog 主要用于故障恢復(fù),如果HRegion所在主機(jī)發(fā)生故障咕娄,那么所維護(hù)的HRegion會(huì)被重新分配至新的主機(jī)上亥揖,新的HRegion Server 在加載HRegion時(shí),可通過Hlog恢復(fù)數(shù)據(jù)圣勒。

3. HMaster

HMaster主要任務(wù)是告訴每個(gè)HRegion Server需要維護(hù)哪些HRegion费变。在Hbase中可以啟動(dòng)多個(gè)HMaster,通過ZooKeeper的Master選舉機(jī)制來保證系統(tǒng)中總會(huì)有一個(gè)HMaster在運(yùn)行圣贸。

HMaster包括以下功能:

1. 管理用戶對(duì)表的增改查操作

2. 管理HRegion的負(fù)責(zé)均衡挚歧,調(diào)整HRegion分布

3. 在HRegion分裂后,負(fù)責(zé)HRegion分配

4. 在HRegion Server停機(jī)后吁峻,負(fù)責(zé)失效HRegion Server上的HRegion遷移

4. zoo keeper

Zoo keeper 是存儲(chǔ)HBase -ROOT-表和.META.表的位置滑负,這是HBase中兩張?zhí)厥獾谋怼7Q為根數(shù)據(jù)表(-ROOT-)和元數(shù)據(jù)表(.META.)用含。
元數(shù)據(jù)表記錄普通用戶表的HRegion標(biāo)識(shí)符信息矮慕,每個(gè)HRgion的標(biāo)識(shí)符為:表名+開始主鍵+唯一ID
隨著用戶表的HRegion的分裂啄骇,.META.表的信息也會(huì)增加痴鳄,并且還可能被分割為幾個(gè)HRegion,此時(shí)可以用一個(gè)-ROOT-表來保存META的HRegion信息缸夹,而-ROOT-表是不能被分割的痪寻,也就是-ROOT-表只有一個(gè)HRegion。
那么客戶端(Client)在訪問用戶數(shù)據(jù)前需要先訪問Zoo Keeper明未,然后訪問-ROOT-表槽华,接著訪問.META.表,最后才能找到用戶數(shù)據(jù)所在位置進(jìn)行訪問趟妥。

-ROOT-表和.META.表

二猫态、 HBase數(shù)據(jù)模型

1. 數(shù)據(jù)模型

  1. 表(Table):是一種稀疏表(不存儲(chǔ)數(shù)據(jù)為NULL的數(shù)據(jù)),表的索引是行關(guān)鍵字披摄、列關(guān)鍵字亲雪、時(shí)間戳
  2. 行關(guān)鍵字(Row Key):行的主鍵,唯一標(biāo)識(shí)一行數(shù)據(jù)疚膊,也稱為行鍵义辕。
    表中的行根據(jù)行鍵進(jìn)行字典排序,所有對(duì)表的訪問都要通過表的行鍵寓盗。
    在創(chuàng)建表時(shí)灌砖,行鍵不用也不能預(yù)先定義璧函,而對(duì)表數(shù)據(jù)進(jìn)行操作時(shí)必須指定行鍵,行鍵在添加數(shù)據(jù)時(shí)首次被確定基显。
  3. 列族(Column Family):行中的列被分為列族蘸吓。
    同一個(gè)列族的所有成員具有相同的列族前綴。例如[course:math]和[course:art]都是列族[course]的成員撩幽。
    一個(gè)表的列族必須在創(chuàng)建表時(shí)預(yù)先定義库继,列族名稱不能包含ASCII控制字符(編號(hào)0~31+127)和冒號(hào)(:)。
  4. 列關(guān)鍵字(Column Key):也稱列鍵窜醉。 格式為:[Family:qualifier]宪萄。
    family 是列族名,用于表示列族前綴榨惰。qualifier是列修飾符拜英,表示列族中的一個(gè)成員,列族成員可以在隨后按需拓展琅催。
  5. 存儲(chǔ)單元(Cell): 在HBase中聊记,值是作為一個(gè)單元保存在系統(tǒng)中的。
    要定位一個(gè)單元恢暖,需要用[行鍵+列鍵+時(shí)間戳] 3個(gè)要素排监。
  6. 時(shí)間戳(Timestamp):插入單元格時(shí)間,默認(rèn)為單元格的版本號(hào)杰捂。

2. 概念圖

在傳統(tǒng)數(shù)據(jù)庫中舆床,只能通過表的主鍵和唯一字段定位到某一條數(shù)據(jù)。


傳統(tǒng)數(shù)據(jù)庫中成績表.png

如上表所示:
主鍵為name嫁佳,主要字段有name挨队、grade、math蒿往、art盛垦。
由于主鍵唯一標(biāo)識(shí)了一行記錄,所以我們很容易按姓名查詢某位同學(xué)的成績瓤漏。

那么思考以下幾個(gè)問題:

  1. 如果新增一門課程腾夯,在不修改表結(jié)構(gòu)的情況下,能保存成績么蔬充?
  2. 如果有同學(xué)參加補(bǔ)考蝶俱,怎么保存兩次成績。
  3. 如果同學(xué)只參加一門考試饥漫,其他課程都沒有成績榨呆。我們能保存只有成績的課程來節(jié)省存儲(chǔ)空間么?

HBase的數(shù)據(jù)模型就能完美解決以上問題庸队。


HBase概覽圖-成績表.png
  • 可以通過[行鍵+時(shí)間戳+列族]來訪問具體的值(單元)积蜻。
  • 對(duì)表操作必須指定行鍵和列鍵闯割,每次操作都會(huì)增加一條數(shù)據(jù)并會(huì)自動(dòng)生成時(shí)間戳。從上到下倒序排列竿拆,不必由用戶管理纽谒。
  • 每次只針對(duì)一個(gè)列鍵操作。且列修飾符可以為空如输。

eg. 在t4時(shí)刻,客戶端添加[jason] 的[grade]為[2]央勒。
類似操作為:先找到行鍵[jason]不见,然后指定列鍵并賦值[grade:=2]。這里的列族修飾符可以為空崔步。前面提到過列族修飾符可以由任意字符組成稳吮。


現(xiàn)在基于HBase回答前面的問題:

  1. 如果jason新增英語科目成績,那么指定行鍵[jason]井濒,列鍵[source:english]灶似,以及值(英語成績)即可。
  2. 如果jason 參加數(shù)學(xué)補(bǔ)考瑞你,那么直接指定行鍵[jason]酪惭,列鍵[source:math],以及值(數(shù)學(xué)補(bǔ)考成績)即可者甲。
  3. 前面說過HBase是稀疏的存儲(chǔ)設(shè)計(jì)春感。其實(shí)概覽圖中空白部分是不會(huì)實(shí)際被存儲(chǔ)的。

3. 物理結(jié)構(gòu)

HBase物理圖-1.png
HBase物理圖-2.png

如圖所示:
HBase 就是這樣一個(gè)基于列的映射數(shù)據(jù)庫虏缸,他只能表示簡(jiǎn)單的鍵值映射關(guān)系鲫懒。

4.HBase數(shù)據(jù)特點(diǎn)

  1. 數(shù)據(jù)類型: 只有簡(jiǎn)單的字符串類型。(傳統(tǒng)SQL有多種數(shù)據(jù)類型)
  2. 數(shù)據(jù)操作:只有簡(jiǎn)單的插入刽辙、查詢窥岩、刪除、清空等操作宰缤,表和表之間是分離的颂翼,沒有復(fù)雜的表和表之間的關(guān)系。(傳統(tǒng)SQL有多種連接操作)
  3. 存儲(chǔ)模式:基于列的存儲(chǔ)慨灭。每個(gè)列族由幾個(gè)文件保存疚鲤,不同列族的文件是分離的。(傳統(tǒng)SQL是基于表格結(jié)構(gòu)和行模式存儲(chǔ))
  4. 數(shù)據(jù)維護(hù): 只是簡(jiǎn)單的插入了新數(shù)據(jù)缘挑,它的舊版本會(huì)保留(傳統(tǒng)SQL是替換修改操作)
  5. 可伸縮: 分布式數(shù)據(jù)庫集歇。能夠輕松的增加和減少硬件數(shù)量,并且對(duì)錯(cuò)誤兼容性較高语淘。(傳統(tǒng)SQL需要中間層才能實(shí)現(xiàn)類似功能)

本文參考與《基于 Hadoop 與 Spark 的大數(shù)據(jù)開發(fā)實(shí)戰(zhàn)》

微信關(guān)注.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末诲宇,一起剝皮案震驚了整個(gè)濱河市际歼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌姑蓝,老刑警劉巖鹅心,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異纺荧,居然都是意外死亡旭愧,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門宙暇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來输枯,“玉大人,你說我怎么就攤上這事占贫√蚁ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵型奥,是天一觀的道長瞳收。 經(jīng)常有香客問我,道長厢汹,這世上最難降的妖魔是什么螟深? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮烫葬,結(jié)果婚禮上血崭,老公的妹妹穿的比我還像新娘。我一直安慰自己厘灼,他們只是感情好夹纫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著设凹,像睡著了一般舰讹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上闪朱,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天月匣,我揣著相機(jī)與錄音,去河邊找鬼奋姿。 笑死锄开,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的称诗。 我是一名探鬼主播萍悴,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了癣诱?” 一聲冷哼從身側(cè)響起计维,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎撕予,沒想到半個(gè)月后鲫惶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡实抡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年欠母,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吆寨。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赏淌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鸟废,到底是詐尸還是另有隱情,我是刑警寧澤姑荷,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布盒延,位于F島的核電站,受9級(jí)特大地震影響鼠冕,放射性物質(zhì)發(fā)生泄漏添寺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一懈费、第九天 我趴在偏房一處隱蔽的房頂上張望计露。 院中可真熱鬧,春花似錦憎乙、人聲如沸票罐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽该押。三九已至,卻和暖如春阵谚,著一層夾襖步出監(jiān)牢的瞬間蚕礼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國打工梢什, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奠蹬,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓嗡午,卻偏偏與公主長得像囤躁,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

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

  • 目錄一. HBaes介紹1.1 HBase簡(jiǎn)介1.2 HBase的角色1.2.1 HMaster1.2.2 HRe...
    Movle閱讀 302評(píng)論 0 5
  • HBase工作原理學(xué)習(xí) 1 HBase簡(jiǎn)介 HBase是一個(gè)高可靠性割以、高性能金度、面向列、可伸縮的分布式存儲(chǔ)系統(tǒng)严沥,利用...
    miss幸運(yùn)閱讀 768評(píng)論 0 11
  • 一猜极、簡(jiǎn)介 Hbase:全名Hadoop DataBase,是一種開源的消玄,可伸縮的跟伏,嚴(yán)格一致性(并非最終一致性)的分...
    菜鳥小玄閱讀 2,385評(píng)論 0 12
  • I want to have somebody like you Like the gentle breeze t...
    Hellojourney閱讀 816評(píng)論 0 0
  • 撒了鹽也沒有出來效果,哈哈翩瓜,沒有看到驚喜受扳,只看到了驚奇!我的畫丑出了想象兔跌!還好勘高,我畫了,不然連獻(xiàn)丑的機(jī)會(huì)都沒有坟桅! ...
    瞳瞳日中的微笑閱讀 233評(píng)論 2 5