Hbase簡介

Apache HBase

1.Hbase起源

HBase是一個開源的非關(guān)系型分布式數(shù)據(jù)庫,它參考了谷歌的BigTable建模瓜客,實現(xiàn)的編程語言為Java剿吻。它是Apache軟件基金會的Hadoop項目的一部分晚伙,運行于HDFS文件系統(tǒng)之上,為 Hadoop 提供類似于BigTable 規(guī)模的服務(wù)絮吵。因此,它可以容錯地存儲海量稀疏的數(shù)據(jù)忱屑。

HBase是一個高可靠蹬敲、高性能、面向列想幻、可伸縮的分布式數(shù)據(jù)庫粱栖,是谷歌BigTable的開源實現(xiàn),主要用來存儲非結(jié)構(gòu)化和半結(jié)構(gòu)化的松散數(shù)據(jù)脏毯。HBase的目標是處理非常龐大的表闹究,可以通過水平擴展的方式,利用廉價計算機集群處理由超過10億行數(shù)據(jù)和數(shù)百萬列元素組成的數(shù)據(jù)表食店。

1.1 關(guān)系數(shù)據(jù)庫已經(jīng)流行很多年渣淤,并且Hadoop已經(jīng)有了HDFS和MapReduce,為什么需要HBase?

  • Hadoop可以很好地解決大規(guī)模數(shù)據(jù)的離線批量處理問題吉嫩,但是价认,受限于HadoopMapReduce編程框架的高延遲數(shù)據(jù)處理機制,使得Hadoop無法滿足大規(guī)模數(shù)據(jù)實時處理應(yīng)用的需求自娩。
  • HDFS面向批量訪問模式用踩,不是隨機訪問模式。
  • 傳統(tǒng)的通用關(guān)系型數(shù)據(jù)庫無法應(yīng)對在數(shù)據(jù)規(guī)模劇增時導(dǎo)致的系統(tǒng)擴展性和性能問題(分庫分表也不能很好解決)忙迁。
  • 傳統(tǒng)關(guān)系數(shù)據(jù)庫在數(shù)據(jù)結(jié)構(gòu)變化時一般需要停機維護脐彩;空列浪費存儲空間。

1.2HBase與傳統(tǒng)的關(guān)系數(shù)據(jù)庫的區(qū)別主要體現(xiàn)在以下幾個方面:

  • 1姊扔、數(shù)據(jù)類型:關(guān)系數(shù)據(jù)庫采用關(guān)系模型惠奸,具有豐富的數(shù)據(jù)類型和存儲方式,HBase則采用了更加簡單的數(shù)據(jù)模型恰梢,它把數(shù)據(jù)存儲為未經(jīng)解釋的字符串佛南。
  • 2梗掰、數(shù)據(jù)操作:關(guān)系數(shù)據(jù)庫中包含了豐富的操作,其中會涉及復(fù)雜的多表連接嗅回。HBase操作則不存在復(fù)雜的表與表之間的關(guān)系及穗,只有簡單的插入、查詢妈拌、刪除拥坛、清空等,因為HBase在設(shè)計上就避免了復(fù)雜的表和表之間的關(guān)系尘分。
  • 3猜惋、存儲模式:關(guān)系數(shù)據(jù)庫是基于行模式存儲的。HBase是基于列存儲的培愁,每個列族都由幾個文件保存著摔,不同列族的文件是分離的。
  • 4定续、數(shù)據(jù)索引:關(guān)系數(shù)據(jù)庫通车兀可以針對不同列構(gòu)建復(fù)雜的多個索引,以提高數(shù)據(jù)訪問性能私股。HBase只有一個索引——行鍵摹察,通過巧妙的設(shè)計,HBase中的所有訪問方法倡鲸,或者通過行鍵訪問供嚎,或者通過行鍵掃描,從而使得整個系統(tǒng)不會慢下來峭状。
  • 5克滴、數(shù)據(jù)維護:在關(guān)系數(shù)據(jù)庫中,更新操作會用最新的當(dāng)前值去替換記錄中原來的舊值优床,舊值被覆蓋后就不會存在劝赔。而在HBase中執(zhí)行更新操作時,并不會刪除數(shù)據(jù)舊的版本胆敞,而是生成一個新的版本着帽,舊有的版本仍然保留。
  • 6移层、可伸縮性:關(guān)系數(shù)據(jù)庫很難實現(xiàn)橫向擴展仍翰,縱向擴展的空間也比較有限。相反幽钢,HBase和BigTable這些分布式數(shù)據(jù)庫就是為了實現(xiàn)靈活的水平擴展而開發(fā)的,能夠輕易地通過在集群中增加或者減少硬件數(shù)量來實現(xiàn)性能的伸縮傅是。

2.Hbase訪問接口

image.png

3.Hbase數(shù)據(jù)模型

Hbase是一個稀疏匪燕、多維度蕾羊、排序的映射表,這張表的索引是行鍵帽驯、列族龟再、列限定符和時間戳。

  • 每個值是一個未經(jīng)解釋的字符串尼变,沒有數(shù)據(jù)類型利凑。用戶在表中存儲數(shù)據(jù),每一行都有一個可排序的行鍵和任意多的列嫌术。
  • 表在水平方向由一個或多個列族組成哀澈,一個列族中可以包含任意多個列,同一個列族里面的數(shù)據(jù)存儲在一起度气。
  • 列族支持動態(tài)擴展割按,可以很輕松地添加一個列族或列,無需預(yù)先定義列的數(shù)量以及類型磷籍,所有列均以字符串形式存儲适荣,用戶需要自行進行數(shù)據(jù)類型轉(zhuǎn)換。
  • HBase中執(zhí)行更新操作時院领,并不會刪除數(shù)據(jù)舊的版本弛矛,而是生成一個新的版本,舊的版本仍然保留(這是和HDFS只允許追加不允許修改的特性相關(guān)的)
圖片.png

下面對上圖的一個具體解釋:

表:HBase采用表來組織數(shù)據(jù)比然,表由行和列組成丈氓,列劃分為若干列族。

行:每個HBase表都由若干行組成谈秫,每個行由行鍵(row key)來標識扒寄。

列族:一個HBase表被分組成許多“列族”(Column Family)的集合,它是基本的訪問控制單元拟烫。

列限定符:列族里的數(shù)據(jù)通過限定符(或列)來定位该编。

單元格:在HBase表中,通過行硕淑、列族和列限定符確定一個“單元格”(cell)课竣,單元格中存儲的數(shù)據(jù)沒有數(shù)據(jù)類型,總被視為字節(jié)數(shù)組byte[]

時間戳:每個單元格都保存著同一份數(shù)據(jù)的多個版本置媳,這些版本采用時間戳進行索引于樟。

4.Hbase的實現(xiàn)原理

HBase的實現(xiàn)包括三個主要的功能組件:

  • 1、庫函數(shù):鏈接到每個客戶端
  • 2拇囊、一個Master主服務(wù)器
  • 3迂曲、許多個Region服務(wù)器

主服務(wù)器Master負責(zé)管理和維護Hbase表的分區(qū)信息,維護Region服務(wù)器列表寥袭,分配Region路捧,負載均衡关霸。

Region服務(wù)器負責(zé)存儲和維護分配給自己的Region,處理來自客戶端的讀寫請求杰扫。

客戶端并不是直接從Master主服務(wù)器上讀取數(shù)據(jù)队寇,而是在獲得Region的存儲位置信息后,直接從Region服務(wù)器上讀取數(shù)據(jù)章姓。

客戶端并不依賴Master佳遣,而是通過Zookeeper來Region位置信息,大多數(shù)客戶端甚至從來不和Master通信凡伊,這種設(shè)計方式使得Master負載很小零渐。

4.1表和Region

一個HBase表被劃分成多個Region。

圖片.png

開始只有一個Region窗声,后臺不斷分裂相恃。Region拆分操作非常快笨觅,接近瞬間拦耐,因為拆分之后Region讀取的仍然是原存儲文件,直到“合并”過程把存儲文件異步地寫到獨立的文件之后见剩,才會讀取新文件杀糯。

圖片.png

4.2Region的定位

元數(shù)據(jù)表,又名.META.表,存儲了Region和Region服務(wù)器的映射關(guān)系。當(dāng)HBase表很大時划咐, .META.表也會被分裂成多個Region

根數(shù)據(jù)表巾乳,又名-ROOT-表或衡,記錄所有元數(shù)據(jù)的具體位置,-ROOT-表只有唯一一個Region,名字是在程序中被寫死的。Zookeeper文件記錄了-ROOT-表的位置

Hbase的三層結(jié)構(gòu)圖如下:

圖片.png

客戶端訪問數(shù)據(jù)時的“三級尋址”:

  • 為了加速尋址歉铝,客戶端會緩存位置信息,同時凑耻,需要解決緩存失效問題太示。
  • 尋址過程客戶端只需要詢問Zookeeper服務(wù)器,不需要連接Master服務(wù)器香浩。

5.Hbase系統(tǒng)架構(gòu)

圖片.png

客戶端

客戶端包含訪問Hbase的接口类缤,同時在緩存中維護著已經(jīng)訪問過的Region位置信息,用來加快后續(xù)數(shù)據(jù)訪問過程邻吭。

Zookeeper服務(wù)器

Zookeeper可以幫助選舉出一個Master作為集群的總管餐弱,并保證在任何時刻總有唯一一個Master在運行,這就避免了Master的“單點失效”的問題。

圖片.png

Master服務(wù)器

主服務(wù)器Master主要負責(zé)表和Region的管理工作:

  • 管理用戶對表的增加膏蚓、刪除猖败、修改、查詢等操作
  • 實現(xiàn)不同Region服務(wù)器之間的負載均衡
  • 在Region分裂或合并后降允,負責(zé)重新調(diào)整Region的分布
  • 對發(fā)生故障失效的Region服務(wù)器上Region進行遷移

Region服務(wù)器

Region服務(wù)器是Hbase中最核心的模塊,負責(zé)維護分配給自己的Region艺糜,并響應(yīng)用戶的讀寫請求剧董。

5.1Region服務(wù)器工作原理

圖片.png

Region服務(wù)器向HDFS文件系統(tǒng)中讀寫數(shù)據(jù)過程:

  • 1、用戶讀寫數(shù)據(jù)過程
    • 用戶寫入數(shù)據(jù)時破停,被分配到相應(yīng)Region服務(wù)器去執(zhí)行
    • 用戶數(shù)據(jù)首先被寫入到MEMStore和Hlog中
    • 只有當(dāng)操作寫入Hlog之后翅楼,commit()調(diào)用才會將其返回給客戶端
    • 當(dāng)用戶讀取數(shù)據(jù)時,Region服務(wù)器首先訪問MEMStore緩存真慢,如果找不到毅臊,再去磁盤上面的StoreFile中尋找
  • 2、緩存的刷新
    • 系統(tǒng)會周期性地把MemStore緩存里的內(nèi)容刷寫到磁盤的StoreFile文件中黑界,清空緩存管嬉,并在Hlog里面寫入一個標記
    • 每次刷寫都生成一個新的StoreFile文件,因此朗鸠,每個Store包含多個StoreFile文件
    • 每個Region服務(wù)器都有一個自己的HLog 文件蚯撩,每次啟動都檢查該文件,確認最近一次執(zhí)行緩存刷新操作之后是否發(fā)生新的寫入操作烛占;如果發(fā)現(xiàn)更新胎挎,則先寫入MemStore,再刷寫到StoreFile忆家,最后刪除舊的Hlog文件犹菇,開始為用戶提供服務(wù)。
  • 3芽卿、StoreFile的合并
    • 每次刷寫都生成一個新的StoreFile揭芍,數(shù)量太多,影響查找速度蹬竖、
    • 調(diào)用Store.compact()把多個合并成一個
    • 合并操作比較耗費資源沼沈,只有數(shù)量達到一個閾值才啟動合并

6.在Hbase之上構(gòu)建SQL引擎

NoSQL區(qū)別于關(guān)系型數(shù)據(jù)庫的一點就是NoSQL不使用SQL作為查詢語言,至于為何在NoSQL數(shù)據(jù)存儲HBase上提供SQL接口币厕,有如下原因:

  • 1列另、易使用。使用諸如SQL這樣易于理解的語言旦装,使人們能夠更加輕松地使用Hasee页衙。
  • 2、減少編碼。使用諸如SQL這樣更高層次的語言來編寫店乐,減少了編寫的代碼量艰躺。

解決方案:Hive整合HBase

Hive與HBase的整合功能從Hive0.6.0版本已經(jīng)開始出現(xiàn),利用兩者對外的API接口互相通信眨八,通信主要依靠hive_hbase-handler.jar工具包(Hive
Storage Handlers)腺兴。由于HBase有一次比較大的版本變動,所以并不是每個版本的Hive都能和現(xiàn)有的HBase版本進行整合廉侧,所以在使用過程中特別注意的就是兩者版本的一致性页响。

7.構(gòu)建Hbase二級索引

HBase只有一個針對行鍵的索引,訪問Hbase表中的行段誊,只有三種方式:

  • 通過單個行鍵訪問
  • 通過一個行鍵的區(qū)間來訪問
  • 全表掃描

使用其他產(chǎn)品為Hbase行鍵提供索引功能:

  • Hindex二級索引
  • Hbase+Redis
  • Hbase+solr
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末闰蚕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子连舍,更是在濱河造成了極大的恐慌没陡,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件索赏,死亡現(xiàn)場離奇詭異盼玄,居然都是意外死亡,警方通過查閱死者的電腦和手機潜腻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門强岸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人砾赔,你說我怎么就攤上這事蝌箍。” “怎么了暴心?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵妓盲,是天一觀的道長。 經(jīng)常有香客問我专普,道長悯衬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任檀夹,我火速辦了婚禮筋粗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘炸渡。我一直安慰自己娜亿,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布蚌堵。 她就那樣靜靜地躺著买决,像睡著了一般沛婴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上督赤,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天嘁灯,我揣著相機與錄音,去河邊找鬼躲舌。 笑死丑婿,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的没卸。 我是一名探鬼主播枯冈,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼办悟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起滩褥,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤病蛉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后瑰煎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铺然,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年酒甸,在試婚紗的時候發(fā)現(xiàn)自己被綠了魄健。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡插勤,死狀恐怖沽瘦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情农尖,我是刑警寧澤析恋,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站盛卡,受9級特大地震影響助隧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜滑沧,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一并村、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧滓技,春花似錦哩牍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春外潜,著一層夾襖步出監(jiān)牢的瞬間原环,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工处窥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嘱吗,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓滔驾,卻偏偏與公主長得像谒麦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子哆致,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354

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

  • 參考:http://www.reibang.com/p/569106a3008f 最近在逐步跟進Hbase的相關(guān)...
    博弈史密斯閱讀 855評論 1 1
  • Mahout:機器學(xué)習(xí)的基本庫 Zookeeper:分布式協(xié)作服務(wù) Flume:日志收集工具 Sqoop:關(guān)系數(shù)據(jù)...
    南宮蕭言閱讀 820評論 0 1
  • 什么是HBase HBase的原型是Google的BigTable論文摊阀,受到了該論文思想的啟發(fā)耻蛇,目前作為Hadoo...
    ZFH__ZJ閱讀 688評論 0 2
  • HBase是Apache基金會的一個項目,是一個分布式可擴展的NoSQL數(shù)據(jù)庫胞此,提供了對結(jié)構(gòu)化臣咖、半結(jié)構(gòu)化、甚至非結(jié)...
    七號蘿卜閱讀 830評論 0 2
  • 一漱牵、簡介 Hbase:全名Hadoop DataBase夺蛇,是一種開源的,可伸縮的酣胀,嚴格一致性(并非最終一致性)的分...
    菜鳥小玄閱讀 2,384評論 0 12