BigTable的開源實現:HBase

      網友投稿 887 2025-03-31

      Google發表GFS、MapReduce、BigTable三篇論文,號稱“三駕馬車”,開啟了大數據的時代。


      GFS對應的Hadoop分布式文件系統HDFS

      MapReduce對應的Hadoop分布式計算框架MapReduce

      BigTable對應的NoSQL系統HBase,如何大規模處理海量數據

      在計算機數據存儲領域,一直是關系數據庫(RDBMS)的天下,以至于在傳統企業的應用領域,許多應用系統設計都是面向數據庫設計,也就是先設計數據庫然后設計程序,從而導致關系模型綁架對象模型,并由此引申出曠日持久的業務對象貧血模型與充血模型之爭。

      業界為了解決關系數據庫的不足,提出了諸多方案,比較有名的是對象數據庫,但是這些數據庫的出現似乎只是進一步證明關系數據庫的優越而已。直到人們遇到了關系數據庫難以克服的缺陷——糟糕的海量數據處理能力及僵硬的設計約束,局面才有所改善。從Google的BigTable開始,一系列的可以進行海量數據存儲與訪問的數據庫被設計出來,更進一步說,NoSQL這一概念被提了出來。

      NoSQL,主要指非關系的、分布式的、支持海量數據存儲的數據庫設計模式。也有解讀為Not Only SQL,表示NoSQL只是關系數據庫的補充,而不是替代方案。其中,HBase是這一類NoSQL系統的杰出代表。

      HBase之所以能具有海量數據處理能力,其根本在于和傳統關系型數據庫設計的不同思路。傳統關系型數據庫對存儲在其上的數據有很多約束,學習關系數據庫都要學習數據庫設計范式,事實上,是在數據存儲中包含了一部分業務邏輯。而NoSQL數據庫則簡單暴力地認為,數據庫就是存儲數據的,業務邏輯應該由應用程序處理。

      HBase可伸縮架構

      HBase為可伸縮海量數據儲存而設計,實現面向在線業務的實時數據訪問延遲。HBase伸縮性主要依賴其:

      可分裂的HRegion

      可伸縮的分布式文件系統HDFS實現

      HRegion

      HBase負責數據存儲的主要進程,應用程序對數據的讀寫操作都是通過和HRegion通信完成。

      HBase中的數據以HRegion為單位進行管理,即應用程序若想訪問一個數據,必須先找到HRegion,然后將數據讀寫操作提交給HRegion,由HRegion完成存儲層面的數據操作。

      HRegionServer是物理服務器,每個HRegionServer上可以啟動多個HRegion實例。當一個 HRegion中寫入的數據太多,達到配置的閾值時,一個HRegion會分裂成兩個HRegion,并將HRegion在整個集群中進行遷移,以使HRegionServer的負載均衡。

      每個HRegion中存儲一段K值區間[key1, key2)的數據,所有HRegion的信息,包括存儲的K值區間、所在HRegionServer地址、訪問端口號等,都記錄在HMaster服務器。為保證HMaster高可用,HBase會啟動多個HMaster,并通過zk選出一個主服務器。

      調用時序圖

      應用程序通過zk獲得主HMaster地址,輸入K值獲得這個K所在的HRegionServer地址,然后請求HRegionServer上的HRegion,獲得所需數據。

      數據寫入過程也一樣,需先得到HRegion才能繼續操作。HRegion會把數據存儲在若干個HFile格式的文件中,這些文件使用HDFS分布式文件系統存儲,在整個集群內分布并高可用。當一個HRegion中數據量太多時,這個HRegion連同HFile會分裂成兩個HRegion,并根據集群中服務器負載進行遷移。如果集群中有新加入的服務器,也就是說有了新的HRegionServer,由于其負載較低,也會把HRegion遷移過去并記錄到HMaster,從而實現HBase的線性伸縮。

      小結

      HBase的核心設計目標是解決海量數據的分布式存儲,和Memcached這類分布式緩存的路由算法不同,HBase的做法是按Key的區域進行分片,這個分片也就是HRegion。應用程序通過HMaster查找分片,得到HRegion所在的服務器HRegionServer,然后和該服務器通信,就得到了需要訪問的數據。

      HBase可擴展數據模型

      傳統關系數據庫為保證關系運算(通過SQL語句)的正確性,在設計數據庫表結構的時候,需要指定表的schema,即字段名稱、數據類型等,并遵循設計范式。這些規范帶來一個問題:僵硬的數據結構難以面對需求變更的挑戰,有些應用系統設計者通過預先設計一些冗余字段來應對,但這種設計顯然很糟。

      如何能夠做到可擴展的數據結構設計呢?

      不用修改表結構就能新增字段?可以的!許多NoSQL數據庫使用的列族(ColumnFamily)設計就是一個解決方案。列族最早在Google BigTable中使用,這是一種面向列族的稀疏矩陣存儲格式:

      BigTable的開源實現:HBase

      表中不同學生的聯系方式各不相同,選修課程也不同, 而且將來還會有更多聯系方式和課程加入到這張表里,如果按照傳統的關系數據庫設計,無論提前預設多少冗余字段都會捉襟見肘。

      而使用支持列族結構的NoSQL數據庫,在創建表時,只需指定列族名字,無需指定字段(Column)。何時指定字段呢?可以在數據寫入時再指定。

      這樣,數據表能包含數百萬的字段,可隨意擴展應用程序的數據結構。并且這種數據庫在查詢時也很方便,可以通過指定任意字段名稱和值進行查詢。

      HBase這種列族的數據結構設計,實際上是把字段的名稱和字段的值,以KV形式一起存儲在HBase。實際寫入時,可隨意指定字段名稱,即使有幾百萬個字段也能輕松應對。

      HBase的高性能存儲

      傳統的機械式磁盤的訪問特性是連續讀寫很快,隨機讀寫很慢,因為機械磁盤靠電機驅動訪問磁盤上的數據,電機要將磁頭落到數據所在的磁道上,這個過程需要較長的尋址時間。如果數據不連續存儲,磁頭就要不停的移動,浪費大量時間。

      為提高數據寫入速度,HBase使用一種叫作LSM樹的數據結構進行數據存儲。LSM樹的全名是Log Structed Merge Tree,翻譯過來就是Log結構合并樹。數據寫入的時候以Log方式連續寫入,然后異步對磁盤上的多個LSM樹進行合并。

      LSM樹可看作是一個N階合并樹。數據寫操作(包括插入、修改、刪除)都在內存中進行,并且都會創建一個新記錄(修改會記錄新的數據值,而刪除會記錄一個刪除標志)。這些數據在內存中仍然還是一棵排序樹,當數據量超過設定的內存閾值后,會將這棵排序樹和磁盤上最新的排序樹合并。當這棵排序樹的數據量也超過設定閾值后,會和磁盤上下一級的排序樹合并。合并過程中,會用最新更新的數據覆蓋舊的數據(或者記錄為不同版本)。

      在需要進行讀操作時,總是從內存中的排序樹開始搜索,如果沒有找到,就從磁盤 上的排序樹順序查找。

      在LSM樹上進行一次數據更新無需磁盤訪問,在內存即可完成。當數據訪問以寫操作為主,而讀操作則集中在最近寫入的數據上時,使用LSM樹可極大減少磁盤訪問次數。

      總結

      HBase架構上通過數據分片的設計配合HDFS,實現數據的分布式海量存儲。

      數據結構上通過列族,實現了數據表結構可以在運行期自定義存儲上通過LSM樹,使數據可通過連續寫磁盤的方式保存數據,極大提高數據寫入性能。

      結合Apache開源社區,使得HBase在NoSQL競品中保持領先優勢,逐步成為NoSQL最具影響力產品。

      HBase 數據庫

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Excel中SUMIF函數條件求和怎么使用
      下一篇:如何返回excel最大值所在行和內容
      相關文章
      亚洲精品国产自在久久 | 亚洲五月综合缴情婷婷| 亚洲一区二区三区在线观看精品中文| 亚洲精品国产摄像头| 亚洲国产成人久久| 久久久久亚洲精品日久生情| 亚洲午夜久久久影院伊人| 中文字幕专区在线亚洲| 亚洲综合色在线观看亚洲| 亚洲精品tv久久久久| 亚洲 自拍 另类小说综合图区| 亚洲AV永久无码精品网站在线观看| 中日韩亚洲人成无码网站| 亚洲中文无码av永久| 亚洲性69影院在线观看| 亚洲一级特黄大片无码毛片| 亚洲av乱码一区二区三区按摩 | 亚洲精品电影在线| 91天堂素人精品系列全集亚洲| 亚洲精品国产成人99久久| 亚洲综合自拍成人| 亚洲白色白色永久观看| 亚洲国产成人久久99精品| 在线观看亚洲AV日韩A∨| 亚洲国产精品99久久久久久| 老牛精品亚洲成av人片| 亚洲精品偷拍视频免费观看| 久久久久国产成人精品亚洲午夜| 亚洲国产成人爱av在线播放| 亚洲成a人片在线观看久| 亚洲精品久久久久无码AV片软件| 日韩欧美亚洲中文乱码| 亚洲精品老司机在线观看| 亚洲香蕉成人AV网站在线观看| 亚洲成AV人片一区二区| 在线电影你懂的亚洲| 麻豆狠色伊人亚洲综合网站| 亚洲风情亚Aⅴ在线发布| 久久精品国产亚洲AV未满十八| 亚洲精品视频免费| 亚洲人成无码网站|