14 大資料之HBASE(第一部 簡介)

荒-於嬉發表於2020-11-14

大資料之HBASE

HBASE定義

HBASE是一種分散式的,可擴充套件,支援海量資料儲存的NoSQL資料庫.

HBASE資料模型

邏輯上,HBASE資料模型同關係型資料庫很類似,資料儲存在一張表中有行有列,但HBASE底層物理存儲存是kv結構的.

HBASE在建立表時必須制定一個類似於主鍵的列(row_key 行鍵)並且在全表是唯一的

HBASE邏輯結構

行和列:類似於MySQL的行和列,行才是用來儲存資料的,定義每一列的內容,但是同時列又是可以動態擴充套件的,比如現在表中有三行五列資料,再次插入一條六列的資料也不影響,並且HBASE可以新建一列.

列族:將某幾個列組合到一起,就是列族.

RowKey:系統自帶的列,也就是建立的時候必須指定的列,按照字典序排序,也就是1,10,11,2,3,4,5,6,7,8,9,只比較第一位.

Reginon:列族是切分了列,不同的列族儲存在不同檔案下,region是按照行切分,不同的region也儲存在不同的檔案中.

store:實際的行列資訊,被行切列切後的一塊就是store.除了store(實際資料之外)其他都會載入到記憶體中.

HBASE物理儲存結構

HBASE中資料儲存每行的每列都會被單獨取出做一些操作.

單獨操作主要記錄了改行該列的資料的rowkey,列族資訊,列資訊,時間戳,型別和value.

row key記錄的是改行的位置,列族和列記錄了列位置

時間戳記錄改資料發生變化的時間,如插入時間,刪除時間,這個時間很重要,記錄了改行資料發生變化的先後順序,在遠端連線HBASE操作時本地時間和伺服器時間需要一致,否則會出現修改了時間但是讀取還是之前內容之類的現象.

型別記錄了是修改插入還是刪除,value則是實際修改的資料.

讀取的時候會按照時間戳依次檢查,返回最大的那個時間戳對應的值,但是如果型別是刪除操作,那麼則不返回.

資料模型

namespace

namespace(名稱空間)類似於MySQL的庫,實現的是表和表之間的隔離,每個名稱空間下都可以存放多張表,HBASE有兩個自帶的名稱空間,分別是hbase和default,hbase是系統的預設空間,存放的是HBASE的後設資料,default是使用者的預設表空間.

region

類似於MySQL的表的概念,不同的是在建立表的時候,只需要指定列族就可以了,不需要指定具體的列,這意味著在朝HBASE寫資料的時候欄位可以按需動態的分配指定.

Row

hbase中每行資料都由一個RowKey和多個column組成,資料是按照rowkey的字典順序儲存的,並且查詢資料的時候只能根據rowkey進行檢索,所以rowkey設計十分重要.

column

HBASE中每個列都由column Family也就是列族和限定字元(column qualifier)進行限定,如info:name ,info:age,建表的時候只需要指明列族,而不需要預先定義列.

Time Stamp

時間戳,用於標識資料的不同版本,記錄每條資料的不同產生時間,插入的時候如果不指定時間戳,那麼會自動為其加上該欄位,其值為寫入HBASE的時間.

cell

通過rowkey,列族,列,時間戳和型別確認的最後的值,也就是使用者寫入的實際資料,cell的資料是沒有型別的,全部都是位元組碼形式儲存.

HBASE架構

region是要經過region server管理的,RegionServer負責了資料的增刪改查,Region則不斷地進行了合併和切分.

HMaster是HBASE的管理節點,同時還需要用到zookeeper儲存後設資料資訊並分配給其部分小任務.

Hmaster管理了表相關的操作,RegionServer管理了表內容的操作如增刪改查等.

相關文章