前文回顧:MapReduce基本原理
目錄
??HBase基本介紹
??HBase的設(shè)計目標和功能特點
??HBase在Hadoop中的生態(tài)環(huán)境
??HBase的數(shù)據(jù)模型
??邏輯數(shù)據(jù)模型
??物理存儲格式
??HBase基本構(gòu)架
??HBase數(shù)據(jù)存儲管理方法
??HBase子表數(shù)據(jù)存儲與子表服務(wù)器
??HBase數(shù)據(jù)的訪問
??HBase數(shù)據(jù)記錄的查詢定位
??HBase基本介紹
HBase 是一種分布式、可擴展、支持海量數(shù)據(jù)存儲的 NoSQL(not only SQL) 數(shù)據(jù)庫。
??HBase的設(shè)計目標和功能特點
Hadoop主要是實現(xiàn)批量數(shù)據(jù)的處理,并且通過順序方式訪問數(shù)據(jù)。要查找數(shù)據(jù)必須搜索整個數(shù)據(jù)集,如果要進行隨機讀取數(shù)據(jù),壓根就不支持。即Hadoop僅適合存儲大批量的數(shù)據(jù),進行順序化讀取數(shù)據(jù),并不支持隨機讀取數(shù)據(jù)操作。
- 針對HDFS缺少結(jié)構(gòu)化半結(jié)構(gòu)化數(shù)據(jù)存儲訪問能力的缺陷,提供一個分布式數(shù)據(jù)管理系統(tǒng),解決大規(guī)模的結(jié)構(gòu)化和半結(jié)構(gòu)化數(shù)據(jù)存儲訪問問題。
- 提供基于列存儲模式的大數(shù)據(jù)表管理能力。可存儲管理數(shù)十億以上的數(shù)據(jù)記錄,每個記錄可包含百萬以上的數(shù)據(jù)列。
- HBase試圖提供隨機和實時的數(shù)據(jù)讀寫訪問能力。
- 具有高可擴展性、高可用性、容錯處理能力、負載平衡能力、以及實時數(shù)據(jù)查詢能力。
??HBase在Hadoop中的生態(tài)環(huán)境
- 構(gòu)建于分布式文件系統(tǒng)HDFS之上。HBase的數(shù)據(jù)(底層數(shù)據(jù))實際上是放在HDFS里的。
- 為上層應(yīng)用提供結(jié)構(gòu)化半結(jié)構(gòu)化海量數(shù)據(jù)存儲訪問能力。
-
可與MapReduce協(xié)同工作,為MapReduce提供數(shù)據(jù)輸入輸出,以完成數(shù)據(jù)的并行化處理。
??HBase的數(shù)據(jù)模型
??邏輯數(shù)據(jù)模型
HBase是一個分布式多維表,表中的數(shù)據(jù)通過:一個行關(guān)鍵字(row key),一個列關(guān)鍵字(column family + column name),一個時間戳(time stamp)進行索引和查詢定位。
-
region
- 類比于關(guān)系型數(shù)據(jù)庫的表概念。不同的是,HBase 定義表時只需要聲明列族,不需要聲明具體的列。這意味著,往 HBase 寫入數(shù)據(jù)時,字段可以動態(tài)、按需指定。因此,和關(guān)系型數(shù)據(jù)庫相比,HBase 能夠輕松應(yīng)對字段變更的場景。
-
行關(guān)鍵字
- HBase一張表可以有上億行記錄,每一行都是由一個行關(guān)鍵字來標識的。和關(guān)系型數(shù)據(jù)庫中的主鍵不同,HBase的row key只能是一個字段而不可以是多個字段的組合。
- HBase保證對所有行按照row key進行字典排序。也就是說,HBase保證相鄰row key的行在存儲時必然是相鄰存放的。(row key是最大長度為64KB的byte數(shù)組,實際應(yīng)用中長度一般為10bytes~100bytes。由于HBase只允許單字段的row key,因此在實際應(yīng)用中需要時經(jīng)常把多個字段組合成一個復(fù)合row key。)
-
列族和列名
- HBase每張表都有一個或者多個列族。列族必須在使用表之前定義。
- 從本質(zhì)來說,HBase的列族就是一個容器。HBase表中的每個列,都必須歸屬于某個列族。
- 列名都以列族作為前綴,列如courses:history,courses:math都屬于courses這個列族。
- 在具體實現(xiàn)上,一張表中的不同列族是分開獨立存放的。就是說,如果有兩個列族family1和family2,那么在HDFS存儲時,family1是一組文件,family2是另外一組文件,兩者不能混合存儲。
- HBase的訪問控制、磁盤和內(nèi)存的使用統(tǒng)計等都是在列族層面進行的。
- 在每個列族中,可以存放很多的列,而每行每列族中的列數(shù)量是可以不同的,數(shù)量可以很大。簡單來說,可以認為每行每列族中保存的是一個Map映射表。
-
時間戳
- HBase中每個存儲單元都保存著同一份數(shù)據(jù)的多個版本。版本通過時間戳來索引。
- 每個存儲單元中,不同版本的數(shù)據(jù)按照時間戳的大小倒序排序,即最新的數(shù)據(jù)排在最前面。這樣在讀取時,將先讀取到最新的數(shù)據(jù)。(時間戳可以由HBase(當(dāng)數(shù)據(jù)寫入時自動用當(dāng)前系統(tǒng)時間)賦值,也可以由用戶顯示賦值。如果應(yīng)用程序要避免數(shù)據(jù)版本沖突,可以自己生成具有唯一性的時間戳。)
優(yōu)秀網(wǎng)圖
??物理存儲格式
- 對于HBase來說,它根本不認為存在行列這樣的概念,在實現(xiàn)時只認為存在鍵值對這樣的概念。鍵值對的存儲是排序的,行概念是通過相鄰的鍵值對比較而構(gòu)建出來的。
- 也就是說,HBase在物理實現(xiàn)上并不存在傳統(tǒng)數(shù)據(jù)庫中的二維表概念。因此二維表中字段值的空洞,對于HBase來說在物理實現(xiàn)上并不存在,而不是所謂的值為null。
-
按列存儲的稀疏行/列矩陣。物理存儲格式上按邏輯模型中的行進行分割,并按照列族存儲。
-
值為空的列不予存儲,節(jié)省存儲空間。
優(yōu)秀網(wǎng)圖
??HBase基本構(gòu)架
由一個MasterServer和一組子表數(shù)據(jù)區(qū)服務(wù)器RegionServer構(gòu)成,分別存儲邏輯大表中的部分數(shù)據(jù)
-
HBase Master:Master是HBase集群的主控服務(wù)器,負責(zé)集群狀態(tài)的管理維護。Master可以有多個,但只有一個是活躍的
(負責(zé)人里的真正老大。- 為Region Server分配Region。
- 負責(zé)Region Server的負載均衡。
- 發(fā)現(xiàn)失效的Region Server并重新分配其上的Region。
- HDFS上的垃圾文件回收。
- 處理schema更新請求。
-
HBase Region Server:Region Server是HBase具體對外提供服務(wù)的進程。
- Region Server維護Master分配給它的Region,處理對這些Region的I/O請求。
- Region Server負責(zé)切分在運行過程中變得過大的Region。
- 當(dāng)一個新的子表服務(wù)器注冊時,主服務(wù)器讓新的子表服務(wù)器裝載子表。
- 若主服務(wù)器與子表服務(wù)器連接超時,那么子表服務(wù)器將自動停止,并重新啟動;而主服務(wù)器則假定該子表服務(wù)器已死機,將其上的數(shù)據(jù)轉(zhuǎn)移至其它子表服務(wù)器,將其上的子表標注為空閑,并在重新啟動后另行分配使用。
??HBase數(shù)據(jù)存儲管理方法
??HBase子表數(shù)據(jù)存儲與子表服務(wù)器
大表被分為很多個子表(Region),每個子表存儲在一個子表服務(wù)器RegionServer上
每個子表中的數(shù)據(jù)區(qū)Region由很多個數(shù)據(jù)存儲塊Store構(gòu)成,而每個Store數(shù)據(jù)塊又由存放在內(nèi)存中的memStore和存放在文件中的StoreFile構(gòu)成。
- 每個列族就存儲在一個Store中。
- StoreFile以Hfile格式保存在HDFS上。
- 每個表一開始只有一個Region,隨著數(shù)據(jù)不斷插入表,Region不斷增大。當(dāng)一個Region增大到一個閾值(由參數(shù)hbase.hregion.max.filesize指定,但這個閾值其實不是限制每個Region大小的,而是限制每個Store大小的)的時候,原來的Region會被分裂成兩個新的Region(從而保證Region不會過大)。
- 隨著表中的行數(shù)不斷增多,Region的數(shù)目也會逐漸增多。
- 多個region共享一個日志(串行)
??HBase數(shù)據(jù)的訪問
-
當(dāng)客戶端需要進行數(shù)據(jù)更新時,先查到子表服務(wù)器,然后向子表提交數(shù)據(jù)更新請求。提交的數(shù)據(jù)并不直接存儲到磁盤上的數(shù)據(jù)文件中,而是添加到一個基于內(nèi)存的子表數(shù)據(jù)對象memStore中,當(dāng)memStore中的數(shù)據(jù)達到一定大小時,系統(tǒng)將自動將數(shù)據(jù)寫入到文件數(shù)據(jù)塊StoreFile中。(就和抽血檢測似的,抽滿一板統(tǒng)一提交去檢測)
-
每個文件數(shù)據(jù)塊StoreFile最后都寫入到底層基于HDFS的文件中(Hfile)
-
需要查詢數(shù)據(jù)時,子表先查memStore。如果沒有,則再查磁盤上的StoreFile。每個StoreFile都有類似B樹的結(jié)構(gòu),允許進行快速的數(shù)據(jù)查詢。StoreFile將定時壓縮,多個壓縮為一個。
-
兩個小的子表可以進行合并。
??HBase數(shù)據(jù)記錄的查詢定位
- 描述所有子表和子表中數(shù)據(jù)塊的元數(shù)據(jù)都存放在專門的元數(shù)據(jù)表中,并存儲在特殊的子表中。子表元數(shù)據(jù)會不斷增長,因此會使用多個子表來保存。
- 所有元數(shù)據(jù)子表的元數(shù)據(jù)都保存在根子表中。主服務(wù)器會掃描根子表,從而得到所有的元數(shù)據(jù)子表位置,再進一步掃描這些元數(shù)據(jù)子表即可獲得所尋找子表的位置。
- 元數(shù)據(jù)子表采用三級索引結(jié)構(gòu)
根子表->用戶表的元數(shù)據(jù)表->用戶表
- 按表的名字排序
- 大表里的行是按role-key作為代表
- 每個region里的第一行的role-key作為代表
參考教材:《深入理解大數(shù)據(jù):大數(shù)據(jù)處理與編程實現(xiàn)》文章來源:http://www.zghlxwxcb.cn/news/detail-437746.html
參考博客:HBase簡介文章來源地址http://www.zghlxwxcb.cn/news/detail-437746.html
到了這里,關(guān)于大數(shù)據(jù) | HBase基本工作原理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!