專家講解 Hadoop:HBASE松散數(shù)據(jù)存儲設計
本節(jié)和大家一起學習一下Hadoop:HBASE松散數(shù)據(jù)存儲設計方面的內容,希望通過本節(jié)介紹大家能夠掌握Hadoop:HBASE松散數(shù)據(jù)存儲設計的方法。
Hadoop:HBASE松散數(shù)據(jù)存儲設計初識
最近關注Hadoop,因此也順便關注了一下Hadoop相關的項目。HBASE就是基于Hadoop的一個開源項目,也是對Google的BigTable的一種實現(xiàn)。
BigTable是什么?Google的Paper對其作了充分的說明。字面上看就是一張大表,其實和我們想象的傳統(tǒng)數(shù)據(jù)庫的表還是有些差別的。松散數(shù)據(jù)可以說是介于MapEntry(key&value)和DBRow之間的一種數(shù)據(jù)。在我使用Memcache的時候,有時候的需求是需要存儲的不僅僅是簡單的一個key對應一個value,可能我需要類似于數(shù)據(jù)庫表結構中多屬性的存儲,但是又不會有傳統(tǒng)數(shù)據(jù)庫表結構中那么多關聯(lián)關系的需求,其實這類數(shù)據(jù)就是所謂的松散數(shù)據(jù)。BigTable最淺顯來看就是一張很大的表,表的屬性可以根據(jù)需求去動態(tài)增加,但是又沒有表與表之間關聯(lián)查詢的需求。
互聯(lián)網(wǎng)應用有一個***的特點,就是速度,功能再強大,速度慢,還是會被舍棄。因此在大訪問量的網(wǎng)站都采取前后的緩存來提升性能和響應時間。對于MapEntry類型的數(shù)據(jù),集中式分布式Cache都有很多選擇,對于傳統(tǒng)的關系型數(shù)據(jù),從MySQL到Oracle都給了很好的支持,唯有松散數(shù)據(jù)這類數(shù)據(jù),采用前后兩種解決方案都不能***化它的處理能力。因此BigTable才有了它用武之地。
HBASE作為Apache的開源項目,也是出于起步階段,因為其實它所依賴的Hadoop也不能說已經到了成熟階段,所以都有很大的發(fā)展空間,這也為我們這些開源愛好者提供了更多空間去貢獻。這里主要會談到HBASE的框架設計方面的知識和它的一些特點,不論是否采用HBASE去解決工作中的問題,一種好的流程設計總會給開發(fā)者和架構設計者帶來一些思想上的火花。
HBASE設計介紹
數(shù)據(jù)模型
HBASE中的每一張表,就是所謂的BigTable。BigTable會存儲一系列的行記錄,行記錄有三個基本類型的定義:RowKey,TimeStamp,Column。RowKey是行在BigTable中的唯一標識,TimeStamp是每次數(shù)據(jù)操作對應關聯(lián)的時間戳,可以看作類似于SVN的版本,Column定義為:<family>:<label>,通過這兩部分可以唯一的指定一個數(shù)據(jù)的存儲列,family的定義和修改需要對HBASE作類似于DB的DDL操作,而對于label的使用,則不需要定義直接可以使用,這也為動態(tài)定制列提供了一種手段。family另一個作用其實在于物理存儲優(yōu)化讀寫操作,同family的數(shù)據(jù)物理上保存的會比較臨近,因此在業(yè)務設計的過程中可以利用這個特性。
HBASE依托于Hadoop的HDFS作為存儲基礎,因此結構也很類似于Hadoop的Master-Slave模式,HbaseMasterServer負責管理所有的HRegionServer,但HbaseMasterServer本身并不存儲HBASE中的任何數(shù)據(jù)。HBASE邏輯上的Table被定義成為一個Region存儲在某一臺HRegionServer上,HRegionServer與Region的對應關系是一對多的關系。每一個HRegion在物理上會被分為三個部分:Hmemcache、Hlog、HStore,分別代表了緩存,日志,持久層。通過一次更新流程來看一下這三部分的作用:
提交更新以及刷新Cache流程
由流程可以看出,提交更新操作將會寫入到兩部分實體中,HMemcache和Hlog中,HMemcache就是為了提高效率在內存中建立緩存,保證了部分最近操作過的數(shù)據(jù)能夠快速的被讀取和修改,Hlog是作為同步Hmemcache和Hstore的事務日志,在HRegionServer周期性的發(fā)起FlushCache命令的時候,就會將Hmemcache中的數(shù)據(jù)持久化到Hstore中,同時會清空Hmemecache中的數(shù)據(jù),這里采用的是比較簡單的策略來做數(shù)據(jù)緩存和同步,復雜一些其實可以參照java的垃圾收集機制來做。
在讀取Region信息的時候,優(yōu)先讀取HMemcache中的內容,如果未取到再去讀取Hstore中的數(shù)據(jù)。
幾個細節(jié):
1.由于每一次FlashCache,就會產生一個HstoreFile,在Hstore中存儲的文件會越來越多,對性能也會產生一定影響,因此達到設置文件數(shù)量閥值的時候就會Merge這些文件為一個大文件。
2.Cache大小的設置以及flush的時間間隔設置需要考慮內存消耗以及對性能的影響。
3.HRegionServer每次重新啟動的時候會將Hlog中沒有被Flush到Hstore中的數(shù)據(jù)再次載入到Hmemcache,因此Hmemcache過大對于啟動的速度也有直接影響。
4.HstoreFile中存儲數(shù)據(jù)采用B-tree的算法,因此也支持了前面提到對于Column同F(xiàn)amily數(shù)據(jù)操作的快速定位獲取。
5.HRegion可以Merge也可以被Split,根據(jù)HRegion的大小決定。不過在做這些操作的時候HRegion都會被鎖定不可使用。
6.HbaseMasterServer通過Meta-infoTable來獲取HRegionServer的信息以及Region的信息,Meta最頂部的一個Region是虛擬的一個叫做RootRegion,通過RootRegion可以找到下面各個實際的Region。
7.客戶端通過HbaseMasterServer獲得了Region所在的RegionServer,然后就直接和RegionServer進行交互,而對于RegionServer相互之間不通信,只和HbaseMasterServer交互,受到MasterServer的監(jiān)控和管理。本節(jié)關于Hadoop:HBASE松散數(shù)據(jù)存儲設計方面的內容介紹到這里。
【編輯推薦】
- 兩種模式運行Hadoop分布式并行程序
- 專家指導 如何進行Hadoop分布式集群配置
- Hadoop集群與Hadoop性能優(yōu)化
- HadoopHBase實現(xiàn)配置簡單的單機環(huán)境
- Hadoop概念及其用法專家講解