The important thing in life is to have a great aim , and the determination

          常用鏈接

          統(tǒng)計

          IT技術(shù)鏈接

          保險相關(guān)

          友情鏈接

          基金知識

          生活相關(guān)

          最新評論

          一文讀懂分布式數(shù)據(jù)庫Hbase

          一、

          1、什么是Hbase

          一個高可靠性、高性能、列存儲、可伸縮、實時讀寫的分布式數(shù)據(jù)庫系統(tǒng)。

          適合于存儲非結(jié)構(gòu)化數(shù)據(jù),基于列的而不是基于行的模式

          如圖:Hadoop生態(tài)中hbase與其他部分的關(guān)系。


          2、關(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)變化時一般需要停機維護(hù);空列浪費存儲空間
          因此,業(yè)界出現(xiàn)了一類面向半結(jié)構(gòu)化數(shù)據(jù)存儲和處理的高可擴展、低寫入/查詢延遲的系統(tǒng),例如,鍵值數(shù)據(jù)庫、文檔數(shù)據(jù)庫和列族數(shù)據(jù)庫(如BigTableHBase等)
          HBase已經(jīng)成功應(yīng)用于互聯(lián)網(wǎng)服務(wù)領(lǐng)域和傳統(tǒng)行業(yè)的眾多在線式數(shù)據(jù)分析處理系統(tǒng)中
          3、HBase與傳統(tǒng)的關(guān)系數(shù)據(jù)庫的區(qū)別

          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ù)維護(hù):在關(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)性能的伸縮
          二、Hbase數(shù)據(jù)模型

          1、模型概述

          HBase是一個稀疏、多維度、排序的映射表,這張表的索引是行鍵、列族、列限定符和時間戳
          每個值是一個未經(jīng)解釋的字符串,沒有數(shù)據(jù)類型
          用戶在表中存儲數(shù)據(jù),每一行都有一個可排序的行鍵和任意多的列
          表在水平方向由一個或者多個列族組成,一個列族中可以包含任意多個列,同一個列族里面的數(shù)據(jù)存儲在一起
          列族支持動態(tài)擴展,可以很輕松地添加一個列族或列,無需預(yù)先定義列的數(shù)量以及類型,所有列均以字符串形式存儲,用戶需要自行進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換
          HBase中執(zhí)行更新操作時,并不會刪除數(shù)據(jù)舊的版本,而是生成一個新的版本,舊有的版本仍然保留(這是和HDFS只允許追加不允許修改的特性相關(guān)的)

          2、數(shù)據(jù)坐標(biāo)
          HBase
          中需要根據(jù)行鍵、列族、列限定符和時間戳來確定一個單元格,因此,可以視為一個“四維坐標(biāo)”,即[行鍵,列族, 列限定符,時間戳]

          [201505003,Info,email, 1174184619081]

          xie@qq.com

          [201505003,Info,email, 1174184620720]

          you@163.com


          3、概念視圖

          4、物理視圖


          三、HBase實現(xiàn)原理

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

          1)庫函數(shù):鏈接到每個客戶端
          2)一個Master主服務(wù)器
          3)許多個Region服務(wù)器
          主服務(wù)器Master負(fù)責(zé)管理和維護(hù)HBase表的分區(qū)信息,維護(hù)Region服務(wù)器列表,分配Region,負(fù)載均衡
          Region服務(wù)器負(fù)責(zé)存儲和維護(hù)分配給自己的Region,處理來自客戶端的讀寫請求
          客戶端并不是直接從Master主服務(wù)器上讀取數(shù)據(jù),而是在獲得Region的存儲位置信息后,直接從Region服務(wù)器上讀取數(shù)據(jù)
          客戶端并不依賴Master,而是通過Zookeeper來獲得Region位置信息,大多數(shù)客戶端甚至從來不和Master通信,這種設(shè)計方式使得Master負(fù)載很小
          2、Region
          開始只有一個
          Region,后來不斷分裂
          Region拆分操作非常快,接近瞬間,因為拆分之后的Region讀取的仍然是原存儲文件,直到“合并”過程把存儲文件異步地寫到獨立的文件之后,才會讀取新文件
          同一個Region不會被分拆到多個Region服務(wù)器
          每個Region服務(wù)器存儲10-1000Region

          元數(shù)據(jù)表,又名.META.表,存儲了RegionRegion服務(wù)器的映射關(guān)系
          當(dāng)HBase表很大時, .META.表也會被分裂成多個Region
          根數(shù)據(jù)表,又名-ROOT-表,記錄所有元數(shù)據(jù)的具體位置
          -ROOT-表只有唯一一個Region,名字是在程序中被寫死的
          Zookeeper文件記錄了-ROOT-表的位置


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

          為了加速尋址,客戶端會緩存位置信息,同時,需要解決緩存失效問題

          尋址過程客戶端只需要詢問Zookeeper服務(wù)器,不需要連接Master服務(wù)器

          3、HBase的三層結(jié)構(gòu)中各層次的名稱和作用

          層次

          名稱

          作用

          第一層

          Zookeper文件

          記錄了-ROOT-表的位置信息

          第二層

          -ROOT-

          記錄了.META.表的Region位置信息

          -ROOT-表只能有一個Region。通過-ROOT-表,就可以訪問.META.表中的數(shù)據(jù)

          第三層

          .META.

          記錄了用戶數(shù)據(jù)表的Region位置信息,.META.表可以有多個Region,保存了HBase中所有用戶數(shù)據(jù)表的Region位置信息

          四、HBase運行機制
          1、HBase系統(tǒng)架構(gòu)


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

          (2、Zookeeper可以幫助選舉出一個Master作為集群的總管,并保證在任何時刻總有唯一一個Master在運行,這就避免了Master的“單點失效”問題
          Zookeeper是一個很好的集群管理工具,被大量用于分布式計算,提供配置維護(hù)、域名服務(wù)、分布式同步、組服務(wù)等。

          (3. Master
          主服務(wù)器Master主要負(fù)責(zé)表和Region的管理工作:
          管理用戶對表的增加、刪除、修改、查詢等操作
          實現(xiàn)不同Region服務(wù)器之間的負(fù)載均衡
          Region分裂或合并后,負(fù)責(zé)重新調(diào)整Region的分布
          對發(fā)生故障失效的Region服務(wù)器上的Region進(jìn)行遷移
          (4. Region服務(wù)器
          Region服務(wù)器是HBase中最核心的模塊,負(fù)責(zé)維護(hù)分配給自己的Region,并響應(yīng)用戶的讀寫請求
          2、Region


          (1、用戶讀寫數(shù)據(jù)過程
          用戶寫入數(shù)據(jù)時,被分配到相應(yīng)Region服務(wù)器去執(zhí)行
          用戶數(shù)據(jù)首先被寫入到MemStoreHlog
          只有當(dāng)操作寫入Hlog之后,commit()調(diào)用才會將其返回給客戶端
          當(dāng)用戶讀取數(shù)據(jù)時,Region服務(wù)器會首先訪問MemStore緩存,如果找不到,再去磁盤上面的StoreFile中尋找
          (2、緩存的刷新
          系統(tǒng)會周期性地把MemStore緩存里的內(nèi)容刷寫到磁盤的StoreFile文件中,清空緩存,并在Hlog里面寫入一個標(biāo)記、
          每次刷寫都生成一個新的StoreFile文件,因此,每個Store包含多個StoreFile文件

          每個Region服務(wù)器都有一個自己的HLog文件,每次啟動都檢查該文件,確認(rèn)最近一次執(zhí)行緩存刷新操作之后是否發(fā)生新的寫入操作;如果發(fā)現(xiàn)更新,則先寫入MemStore,再刷寫到StoreFile,最后刪除舊的Hlog文件,開始為用戶提供服務(wù)
          (3、StroreFile的合并
          每次刷寫都生成一個新的StoreFile,數(shù)量太多,影響查找速度
          調(diào)用Store.compact()把多個合并成一個
          合并操作比較耗費資源,只有數(shù)量達(dá)到一個閾值才啟動合并
          3、Store工作原理
          StoreRegion服務(wù)器的核心
          多個StoreFile合并成一個
          觸發(fā)分裂操作,1個父Region被分裂成兩個子Region
          單個StoreFile過大時,又
          4、HLog工作原理
          分布式環(huán)境必須要考慮系統(tǒng)出錯。HBase采用HLog保證系統(tǒng)恢復(fù)
          HBase系統(tǒng)為每個Region服務(wù)器配置了一個HLog文件,它是一種預(yù)寫式日志(WriteAhead Log
          用戶更新數(shù)據(jù)必須首先寫入日志后,才能寫入MemStore緩存,并且,直到MemStore緩存內(nèi)容對應(yīng)的日志已經(jīng)寫入磁盤,該緩存內(nèi)容才能被刷寫到磁盤

          Zookeeper會實時監(jiān)測每個Region服務(wù)器的狀態(tài),當(dāng)某個Region服務(wù)器發(fā)生故障時,Zookeeper會通知Master
          Master首先會處理該故障Region服務(wù)器上面遺留的HLog文件,這個遺留的HLog文件中包含了來自多個Region對象的日志記錄
          系統(tǒng)會根據(jù)每條日志記錄所屬的Region對象對HLog數(shù)據(jù)進(jìn)行拆分,分別放到相應(yīng)Region對象的目錄下,然后,再將失效的Region重新分配到可用的Region服務(wù)器中,并把與該Region對象相關(guān)的HLog日志記錄也發(fā)送給相應(yīng)的Region服務(wù)器
          Region服務(wù)器領(lǐng)取到分配給自己的Region對象以及與之相關(guān)的HLog日志記錄以后,會重新做一遍日志記錄中的各種操作,把日志記錄中的數(shù)據(jù)寫入到MemStore緩存中,然后,刷新到磁盤的StoreFile文件中,完成數(shù)據(jù)恢復(fù)
          共用日志優(yōu)點:提高對表的寫操作性能;缺點:恢復(fù)時需要分拆日志
          五、HBase性能
          1、行鍵(RowKey)

          行鍵是按照字典序存儲,因此,設(shè)計行鍵時,要充分利用這個排序特點,將經(jīng)常一起讀取的數(shù)據(jù)存儲到一塊,將最近可能會被訪問的數(shù)據(jù)放在一塊。

          舉個例子:如果最近寫入HBase表中的數(shù)據(jù)是最可能被訪問的,可以考慮將時間戳作為行鍵的一部分,由于是字典序排序,所以可以使用Long.MAX_VALUE- timestamp作為行鍵,這樣能保證新寫入的數(shù)據(jù)在讀取時可以被快速命中。

          InMemory:創(chuàng)建表的時候,可以通過HColumnDescriptor.setInMemory(true)將表放到Region服務(wù)器的緩存中,保證在讀取的時候被cache命中。

          Max Version:創(chuàng)建表的時候,可以通過HColumnDescriptor.setMaxVersions(int maxVersions)設(shè)置表中數(shù)據(jù)的最大版本,如果只需要保存最新版本的數(shù)據(jù),那么可以設(shè)置setMaxVersions(1)。

          Time To Live創(chuàng)建表的時候,可以通過HColumnDescriptor.setTimeToLive(inttimeToLive)設(shè)置表中數(shù)據(jù)的存儲生命期,過期數(shù)據(jù)將自動被刪除,例如如果只需要存儲最近兩天的數(shù)據(jù),那么可以設(shè)置setTimeToLive(2* 24 * 60 * 60)

          2、HBaseMaster默認(rèn)基于WebUI服務(wù)端口為60010,HBase region服務(wù)器默認(rèn)基于WebUI服務(wù)端口為60030.如果master運行在名為master.foo.com的主機中,mater的主頁地址就是http://master.foo.com:60010,用戶可以通過Web瀏覽器輸入這個地址查看該頁面
          可以查看HBase集群的當(dāng)前狀態(tài)
          3、NoSQL區(qū)別于關(guān)系型數(shù)據(jù)庫的一點就是NoSQL不使用SQL作為查詢語言,至于為何在NoSQL數(shù)據(jù)存儲HBase上提供SQL接口

          易使用,減少編碼

          4、HBase只有一個針對行健的索引

          訪問HBase表中的行,只有三種方式:

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

          總結(jié):
          1、HBase數(shù)據(jù)庫是BigTable的開源實現(xiàn),和BigTable一樣,支持大規(guī)模海量數(shù)據(jù),分布式并發(fā)數(shù)據(jù)處理效率極高,易于擴展且支持動態(tài)伸縮,適用于廉價設(shè)備
          2、HBase可以支持NativeJava API、HBaseShell、ThriftGatewayHive等多種訪問接口,可以根據(jù)具體應(yīng)用場合選擇相應(yīng)訪問方式
          3、HBase實際上就是一個稀疏、多維、持久化存儲的映射表,它采用行鍵、列鍵和時間戳進(jìn)行索引,每個值都是未經(jīng)解釋的字符串。
          4、HBase采用分區(qū)存儲,一個大的表會被分拆許多個Region,這些Region會被分發(fā)到不同的服務(wù)器上實現(xiàn)分布式存儲
          5、HBase的系統(tǒng)架構(gòu)包括客戶端、Zookeeper服務(wù)器、Master主服務(wù)器、Region服務(wù)器。客戶端包含訪問HBase的接口;Zookeeper服務(wù)器負(fù)責(zé)提供穩(wěn)定可靠的協(xié)同服務(wù);Master主服務(wù)器主要負(fù)責(zé)表和Region的管理工作;Region服務(wù)器負(fù)責(zé)維護(hù)分配給自己的Region,并響應(yīng)用戶的讀寫請求

          posted on 2017-07-19 22:24 鴻雁 閱讀(253) 評論(0)  編輯  收藏 所屬分類: IT技術(shù)相關(guān)

          主站蜘蛛池模板: 兴仁县| 龙州县| 利川市| 涟源市| 普兰县| 白山市| 秭归县| 拉萨市| 迭部县| 西城区| 秦皇岛市| 湾仔区| 武强县| 海淀区| 南昌市| 定远县| 尤溪县| 全南县| 承德市| 腾冲县| 汨罗市| 山东省| 交口县| 库车县| 怀集县| 桦甸市| 永寿县| 双城市| 凤庆县| 鄂尔多斯市| 都江堰市| 武宁县| 梧州市| 塘沽区| 合肥市| 韩城市| 乳源| 宣化县| 缙云县| 望江县| 长垣县|