1/5 HBase( 二 )



1/5 HBase

文章插圖
在創建一個表的時候,列族必須作為模式定義的一部分預先給出,而列族是支持動態擴展的,也就是列族成員可以隨后按需加入 。物理上,所有的列族成員一起存放在文件系統上,所以實際上說HBase是面向列的數據庫,更準確的應該是面向列族,調優和存儲都是在列族這個層次上進行的 。一般情況下,同一個列族的成員最后具有相同的訪問模式和大小特征 。
??總結起來 , HBase表和我們熟知的RDBMS的表很像,不同之處在于:行按行鍵排序 , 列劃分為列族,單元格有版本號,沒有數據類型 。
2.4.2 Hbase數據坐標
HBase中需要根據行鍵、列族、列限定符和時間戳來確定一個單元格(cell),cell中的數據是沒有類型的,全部是字節碼形式存貯 。,因此,可以視為一個“四維坐標”,即[行鍵, 列族, 列限定符, 時間戳] 。

1/5 HBase

文章插圖
對于上圖這樣一個HBase表,其數據坐標舉例如下:
鍵值[“201505003”, “Info”, “email”, 1174184619081]“xie@qq.com”[“201505003”, “Info”, “email”, 1174184620720]“you@163.com”2.4.3 HBase區域
HBase自動把表水平劃分為區域(Region),每個區域都是有若干連續行構成的 , 一個區域由所屬的表、起始行、終止行(不包括這行)三個要素來表示 。
??一開始,一個表只有一個區域 , 但是隨著數據的增加,區域逐漸變大,等到它超出設定的閾值大?。?就會在某行的邊界上進行拆分,分成兩個大小基本相同的區域 。然后隨著數據的再增加,區域就不斷的增加,如果超出了單臺服務器的容量,就可以把一些區域放到其他節點上去,構成一個集群 。也就是說:集群中的每個節點(Region Server)管理整個表的若干個區域 。所以,我們說:區域是HBase集群上分布數據的最小單位 。

1/5 HBase

文章插圖
三、HBase系統架構3.1 架構圖
1/5 HBase

文章插圖
3.2 組件介紹HBase由三種類型的服務器以主從模式構成:
  • Region Server:負責數據的讀寫服務,用戶通過與Region server交互來實現對數據的訪問 。
  • HBase HMaster:負責Region的分配及數據庫的創建和刪除等操作 。
  • ZooKeeper:負責維護集群的狀態(某臺服務器是否在線 , 服務器之間數據的同步操作及master的選舉等) 。
HDFS的DataNode負責存儲所有Region Server所管理的數據,即HBase中的所有數據都是以HDFS文件的形式存儲的 。出于使Region server所管理的數據更加本地化的考慮,Region server是根據DataNode分布的 。HBase的數據在寫入的時候都存儲在本地 。但當某一個region被移除或被重新分配的時候,就可能產生數據不在本地的情況 。這種情況只有在所謂的compaction之后才能解決 。
Client
包含訪問HBase的接口并維護cache來加快對HBase的訪問
Zookeeper
保證任何時候,集群中只有一個master
存貯所有Region的尋址入口 。
實時監控Region server的上線和下線信息 。并實時通知Master
存儲HBase的schema和table元數據
Master
為Region server分配region
負責Region server的負載均衡
發現失效的Region server并重新分配其上的region
管理用戶對table的增刪改操作
RegionServer
Region server維護region , 處理對這些region的IO請求
Region server負責切分在運行過程中變得過大的region
HLog(WAL log):
HLog文件就是一個普通的Hadoop Sequence File,Sequence File 的Key是 HLogKey對象,HLogKey中記錄了寫入數據的歸屬信息 , 除了table和 region名字外,同時還包括sequence number和timestamp,timestamp是” 寫入時間”,sequence number的起始值為0,或者是最近一次存入文件系 統sequence number 。
HLog SequeceFile的Value是HBase的KeyValue對象,即對應HFile中的 KeyValue
Region
HBase自動把表水平劃分成多個區域(region),每個region會保存一個表里面某段連續的數據;每個表一開始只有一個region , 隨著數據不斷插 入表,region不斷增大,當增大到一個閥值的時候,region就會等分會兩個新的region(裂變);

推薦閱讀