<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          什么是HBase?它是怎樣工作的?終于有人講明白了

          共 3735字,需瀏覽 8分鐘

           ·

          2020-10-11 14:19


          導讀:HBase是一個構建在HDFS之上的、分布式的、支持多版本的NoSQL數(shù)據(jù)庫,它的出現(xiàn)補齊了大數(shù)據(jù)場景下快速查詢數(shù)據(jù)能力的短板。它非常適用于對平臺中的熱數(shù)據(jù)進行存儲并提供查詢功能。


          作者:朱凱
          來源:大數(shù)據(jù)DT(ID:hzdashuju)





          01 概述

          HBase的出現(xiàn)很好地彌補了大數(shù)據(jù)快速查詢能力的空缺。讓我們再次將時間撥回到2006年,那時Hadoop項目已經(jīng)正式啟動,開源社區(qū)已經(jīng)擁有了HDFS和MapReduce。通過HDFS我們擁有了能夠存儲海量文件的分布式文件系統(tǒng)。通過MapReduce我們擁有了一種對海量數(shù)據(jù)進行批處理操作的途徑。

          但是這還不夠,我們在大數(shù)據(jù)領域還沒有一款能夠稱為數(shù)據(jù)庫的產(chǎn)品。就在2006年年末,Google發(fā)表了著名的Bigtable論文。此后HBase便誕生了。

          HBase是一個構建在HDFS之上的、分布式的、支持多版本的NoSql數(shù)據(jù)庫。它也是Google BigTable的開源實現(xiàn)。HBase非常適合于對海量數(shù)據(jù)進行實時隨機讀寫。HBase中的一張表能夠支撐數(shù)十億行和數(shù)百萬列。

          HBase從設計上來講是一個由三類服務組成的Master/Slave架構服務。HBase Master進程負責處理Region分配、DDL(create、delete表)這類操。數(shù)據(jù)的讀寫由RegionServers進程負責處理。底層數(shù)據(jù)存儲和集群協(xié)同管理則交由HDFS和Zookeeper進行管理,如圖2-6所示。

          ▲圖2-6 HBase邏輯架構圖

          HBase的所有數(shù)據(jù)最終都以HDFS文件的形式進行存儲,Region Server服務通常是伴隨著HDFS的Datanode進行部署的,這樣可以更好地利用數(shù)據(jù)本地性的優(yōu)勢。

          HBase采用主從架構。其分布式協(xié)調是通過Zookeeper進行管理的,而數(shù)據(jù)的物理存儲最終會以文件的形式存儲到HDFS。


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

          HBase是一個NoSQL數(shù)據(jù)庫,它通過一個四維數(shù)據(jù)模型定義數(shù)據(jù),如圖2-7所示。

          • RowKey:HBase中的每行數(shù)據(jù)都必須擁有一個唯一的行鍵,它類似于關系型數(shù)據(jù)庫中的主鍵。
          • Column Family:HBase中的每個列都歸屬于一個列簇,它類似于子表的概念。一個列簇對應一個MemStore對象。
          • Column:HBase用列來定義數(shù)據(jù)屬性字段,和關系型數(shù)據(jù)庫中的表字段類似。
          • Version:HBase中的數(shù)據(jù)是有版本概念的,每次新增或者修改數(shù)據(jù)都會產(chǎn)生一個新的版本。

          ▲圖2-7 HBase的四維數(shù)據(jù)模型

          HBase的數(shù)據(jù)模型由行鍵、列簇、列名和版本號組成。


          03 Regions

          HBase的表以RowKey的起止區(qū)間為范圍被水平切分成了多個Region。每個Region中包含了RowKey從開始到結束區(qū)間的所有行。這些Region被分配到的集群節(jié)點稱為RegionServers,RegionServers負責提供HBase中數(shù)據(jù)的讀寫功能。一個RegionServer可以容納大約1000個Region,如圖2-8所示。

          ▲圖2-8 HBase Regions的邏輯結構

          一個Region Server包含了多個Region,每個Region包含了一部分數(shù)據(jù)。


          04 HBase Master

          HBase Master主要負責Region的分配和一些DDL操作,如圖2-9所示。HBase Master在啟動、失敗恢復或者負載均衡的時候為region指定所屬的RegionServer,或者是創(chuàng)建、刪除和更新表的這類操作。

          ▲圖2-9 HBase Master的邏輯結構

          HMaster作為主控節(jié)點并不直接存儲數(shù)據(jù),它只是做一些統(tǒng)籌分配和DDL操作。


          05 Region Server

          之前我們提到過,為了利用HDFS數(shù)據(jù)本地性的能力,通常會將RegionServer一同安裝在HDFS的Datanode所在的服務器之上,如圖2-10所示。RegionServer自身包含這么幾個部分:

          • WAL:預寫日志是HDFS上的一個文件,它是一種容災策略。HBase為了提高寫入性能,在寫入數(shù)據(jù)的時候并不急于將數(shù)據(jù)保存到磁盤,而是將數(shù)據(jù)直接保留在內存中。但是內存中的數(shù)據(jù)并不是一直可靠的,所以HBase采用了預寫日志的方案。當有新數(shù)據(jù)寫入的時候,RegionServer先通過預寫日志的方式記錄數(shù)據(jù),同時將數(shù)據(jù)放入內存對象MemStore中。當日志寫完之后就立刻返回客戶端告知寫入成功。
          • BlockCache:數(shù)據(jù)塊緩存是一種讀緩存,客戶端讀取數(shù)據(jù)的時候會先從這個緩存中查找有沒相應的數(shù)據(jù)。塊數(shù)據(jù)緩存采用LRU失效策略。
          • MemStore:MemStore是一種寫緩存,HBase為了提升寫入性能不會直接將數(shù)據(jù)刷入磁盤而是先使用MemStore內存對象存儲數(shù)據(jù)。再通過一個守護線程定期將MemStore刷入磁盤。在一個region中每個列簇都擁有一個MemStore。
          • Hfile:Hfile是HBase最終數(shù)據(jù)存儲的載體,它本質上是HDFS上的一個文件。

          ▲圖2-10 Region Server的邏輯結構

          Region Server是HBase中真正存儲數(shù)據(jù)的地方,它主要由WAL、BlockCache、MemStore和HFile組成。


          06 MemStore與HFile

          為了提高數(shù)據(jù)寫入時的吞吐量,HBase并不會實時的將寫入的數(shù)據(jù)直接刷入磁盤,而是先將數(shù)據(jù)放入內存中進行保管,MemStroe對象就是負責此項任務的邏輯對象,它將數(shù)據(jù)以Key-Values的形式保存在內存中。

          將數(shù)據(jù)直接放入內存讀寫雖然很快,但這樣做并不安全,因為一旦服務器重啟數(shù)據(jù)便會全部丟失。所以HBase在此處設計了一種預寫日志結合MemStroe的方式來解決這個問題。

          當客戶端向HBase發(fā)起一次寫入請求的時候,HBase首先會通過RegionServer將數(shù)據(jù)寫入預寫日志,之后再用MemStroe對象將數(shù)據(jù)保存到內存之中。由于有了預寫日志,當服務出現(xiàn)故障重啟之后,Region可以通過日志將數(shù)據(jù)復原到MemStroe。

          HBase的這種寫入策略極大地提升了其數(shù)據(jù)寫入的吞吐量,因為一旦寫入日志的動作完成了就算寫入數(shù)據(jù)成功。同時預寫日志是對磁盤文件的順序寫入操作,其寫入速度也十分的迅速。

          但是,畢竟內存空間是有限的,MemStroe不可能沒有限制的存儲數(shù)據(jù)。所以當一個MemStroe存儲的數(shù)據(jù)達到某個閾值的時候,HBase會將這個MemStroe的數(shù)據(jù)通過HFile的形式寫入磁盤并清空該MemStroe。

          HFile是HBase最終存儲數(shù)據(jù)的載體,它本質上對應的是HDFS的文件。因為HFile是以經(jīng)過排序的Key-Values對象的形式進行存儲的,所以它的在寫入文件的時候只需要采用順序寫,寫入速度非常快。HFile的邏輯架構如圖2-11所示。


          07 使用場景

          HBase由于它強大的存儲和查詢性能使得它在大數(shù)據(jù)領域成為一個多面手。

          1. 平臺存儲

          由于HBase構建在HDFS之上,這意味著它能像HDFS一樣實現(xiàn)存儲的線性擴容。同時它又能提供毫秒級的查詢性能。所以它可以作為其他大數(shù)據(jù)組件的低層存儲支持。比如Apache Kylin就是使用HBase作為其數(shù)據(jù)索引的存儲載體。

          ▲圖2-11 Region Server的邏輯結構

          2. 應用存儲/緩存

          由于HBase出色的寫入性能,它非常適合大規(guī)模數(shù)據(jù)的實時寫入場景。比如在流計算、用戶行為數(shù)據(jù)存儲等場景就非常適合用HBase進行存儲。

          關于作者:朱凱,資深大數(shù)據(jù)專家和架構師,擁有10年IT從業(yè)經(jīng)驗,精通大數(shù)據(jù)、Java、Node.JS等技術。對大數(shù)據(jù)領域的主流技術與解決方案有深入研究,擅長分布式系統(tǒng)的架構設計與整合。曾主導過多款大數(shù)據(jù)平臺級產(chǎn)品的規(guī)劃設計與研發(fā)工作,一線實戰(zhàn)經(jīng)驗豐富。

          本文摘編自企業(yè)級大數(shù)據(jù)平臺構建:架構與實現(xiàn)》,經(jīng)出版方授權發(fā)布。

          延伸閱讀企業(yè)級大數(shù)據(jù)平臺構建:架構與實現(xiàn)
          點擊上圖了解及購買
          轉載請聯(lián)系微信:DoctorData

          推薦語:資深大數(shù)據(jù)專家/一線架構師20000小時實際工作經(jīng)驗總結。以橫向視角出發(fā),拉通Hadoop體系技術棧,手把手教你快速構建一個真實可用、安全可靠的企業(yè)級大數(shù)據(jù)平臺。


          劃重點?


          干貨直達?


          更多精彩?

          在公眾號對話框輸入以下關鍵詞
          查看更多優(yōu)質內容!

          PPT?|?讀書?|?書單?|?硬核?|?干貨?|?講明白?|?神操作
          大數(shù)據(jù)?|?云計算?|?數(shù)據(jù)庫?|?Python?|?可視化
          AI?|?人工智能?|?機器學習?|?深度學習?|?NLP
          5G?|?中臺?|?用戶畫像?|?1024?|?數(shù)學?|?算法?|?數(shù)字孿生

          據(jù)統(tǒng)計,99%的大咖都完成了這個神操作
          ?


          瀏覽 12
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  男女啪啪啪啪网站 | 日韩黄色视频网站 | 精品人要播放 | 久久久久久三级片AV | 超碰爆乳|