HBase數據模型、RowKey、Column Family(列族)和qualifier(列)、Timestamp時間戳、Cell單元格、讀寫流程、HLog(WAL log)


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( = + ), version} 唯一確定的單元。cell中的數據是沒有類型的,全部是字節碼形式存貯。

讀寫流程

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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM