1. 程式人生 > 實用技巧 >第二章:HBase的資料結構及邏輯儲存結構

第二章:HBase的資料結構及邏輯儲存結構

HBase

第二章:HBase的資料結構及邏輯儲存結構


提示:寫完文章後,目錄可以自動生成,如何生成可參考右邊的幫助文件

文章目錄


前言

本文主要講解HBase儲存資料的邏輯結構、HBase的資料模型及HBase在底層儲存資料的物理儲存結構


提示:以下是本篇文章正文內容,下面案例可供參考

一、HBase的邏輯結構

在這裡插入圖片描述

HBase的資料模型和資料庫很類似,但底層的儲存結構完全不同。

HBase的資料模型分為:store(相當於表)、列、Row Key(行)、region(列的集合)、列族

(1)store

store就相當於一個表,由多行和多列組成,store中包含memstore,主要用來寫資料,每個store對應一個列族。
設定memstore的主要原因是:儲存在HDFS上的資料需要按照row key 排序。而HDFS本身被設計為順序讀寫,不允許修改。這樣的話,HBase就不能夠高效的寫資料,因為要寫入到HBase的資料不會被排序,這也就意味著要存入HDFS中的資料是無序的,這顯然不利於儲存資料後的資料檢索。
所以memstore的作用是當寫入資料到store時,資料先寫到memstore中,只有當資料量達到一定閾值,之間的時間足夠memstore將資料進行排序後再統一寫到HDFS中。

(2)列

就是資料的一列,建表時,需要先指定列族才能建立列,每個列都由Column Famile(列族)和Column Qualifier(列限定符即列名)決定

(3)列族

包括多列,設定列族的目的是防止寬表(即有多列資料的表),即當資料列數很多是,設定列族可以大大提高檢索效率。
如:要查詢一個值,先找到這個值所對應列所在的列族(在HDFS中檔案的儲存是按store來分的,即檔案的儲存是按列族來分的)就可以精確的找到這個列族所在的檔案進行檢索。

(4)Row Key

代表一行資料,一列資料的唯一標識。Row Key的排序是逐位排的,即先比較第一位,若比出大小則不用對後面的進行比較,若第一位未比出大小,則要繼續順位比較下去,直到比較出來為止(注:若這一位為空則比0小)。

如:row_key1<row_key_11 ; row_key11<row_key2

(5)Region

region的作用是防止高表,即防止資料行數過多,可以將資料量大的表切分為多個region

二、使用步驟

1.物理儲存結構圖示:
在這裡插入圖片描述

storeFile即為HBase底層儲存資料的結構
如圖可以清晰地看到在邏輯結構表中的每一個值對應物理儲存結構的一行,每個值都有一些其它屬性,如:
Row Key代表列的唯一標識,用以標識該資料在這一行中;
Column Family代表這個值所在的列族;
Column Qualifier唯一標識這個值所在的列;
Time Stamp區分不同版本的資料,如當你修改這個資料後,原來的資料並不會直接被刪除,而是因為新修改的資料時間戳大於之前資料的時間戳,所以在上層顯示的就是新修改的資料;
Type用於鑑別資料的型別(僅有put和out兩種)當資料被刪除時Type值為out,此時並不會顯示時間戳更小的那個值,因為此資料仍然存在,並沒有被刪除。
HBase底層使用這樣的儲存模式,可以大大提高資料的讀取效率,並且提升了資料的容錯率,因為以前的資料都沒有被刪除而是儲存起來了,只不過我們看不到。


三、資料模型

(1)Name Space

名稱空間,相當於MySQL的DataBase都是存放表的集合。HBase有兩個自帶的名稱空間,分別是 hbase 和 default,hbase 中存放的是 HBase 內建的表,default 表是使用者預設使用的名稱空間。hbase名稱空間存放的都是一些系統配置的表,所以儘量不要對這個名稱空間進行操作。

(2)Region

類似於關係型資料庫的表概念。不同的是,HBase 定義表時只需要宣告列族即可,不需要宣告具體的列。這意味著,往 HBase 寫入資料時,欄位可以動態、按需指定即並不是指定了一個列就需要所有row key都要有這個列。因此,和關係型資料庫相比,HBase 能夠輕鬆應對欄位變更的場景。

(3)Row

HBase 表中的每行資料都由一個 RowKey 和多個 Column(列)組成,資料是按照 RowKey的字典順序儲存的,並且查詢資料時只能根據 RowKey 進行檢索,所以 RowKey 的設計十分重要。

(4)Column

HBase 中的每個列都由 Column Family(列族)和 Column Qualifier(列限定符)進行限定,例如 info:name,info:age(其中info為列族,name或age為列限定符)。建表時,只需指明列族,而列限定符無需預先定義。

(5)Time Stamp

用於標識資料的不同版本(version),每條資料寫入時,如果不指定時間戳,系統會自動為其加上該欄位,其值為寫入 HBase 的時間。

(6)Cell

由{rowkey, column Family:column Qualifier, time Stamp} 唯一確定的單元。cell 中的資料是沒有型別的,全部是位元組碼形式存貯