HBase數據模型
HRegion是HBase中分布式存儲和負載均衡的最小單元。最小單元就表示不同的HRegion可以分布在不同的 HRegionServer上。
在 HDFS 上 HBase 每個表的目錄下,會以 Region 划分並形成對應的目錄
HRegion由一個或者多個Store組成,每個store保存一個columns family(列族)。
每個Strore又至少由一個memStore和0至多個StoreFile組成。如圖:StoreFile以HFile格式保存在HDFS上。
RowKey
唯一標識一行數據
可以通過RowKey獲取一行數據
按照字典順序排序的。、
按照字典升序
Row key只能存儲64k的字節數據 一般10-100byte
Column Family(列族)和qualifier(列)
HBase表中的每個列都歸屬於某個列族,列族必須作為表模式(schema)定義的一部分預先給出。如 create ‘test’, ‘course’。
列名以列族作為前綴,每個“列族”都可以有多個列成員(column);如course:math, course:english, 新的列族成員(列)可以隨后按需求動態加入。
權限控制、存儲以及調優都是在列族層面進行的;
因為 HBase 是面向列族的
HBase把同一列族里面的數據存儲在同一目錄下,由幾個文件保存。
在 HDFS 上 HBase 的 目錄結構
/hbase/data/namespace(命名空間,類似於庫)/表名/Region/列族/HFile
Timestamp時間戳
在HBase每個cell存儲單元對同一份數據有多個版本,根據唯一的時間戳來區分每個版本之間的差異,不同版本的數據按照時間倒序排序,最新的數據版本排在最前面。
時間戳的類型是 64位整型。
時間戳可以由HBase(在數據寫入時自動)賦值,此時時間戳是精確到毫秒的當前系統時間
時間戳也可以由客戶顯式賦值,如果應用程序要避免數據版本沖突,就必須自己生成具有唯一性的時間戳。
一般不會手動指定
Cell單元格
由行和列的坐標交叉決定。
單元格是有版本的。
單元格的內容是未解析的字節數組。
由{row key, column( =
讀寫流程
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。