Hbase列式儲存入門教程

2022-09-21 01:36:12 字數 3339 閱讀 4342

目錄

hbase是一種分布式、可擴充套件、支援海量資料儲存的nosql資料庫。分布式是因為hbase底層使用hdfs儲存資料,可擴充套件也是基於hdfs的橫向擴充套件能力,作為大資料的儲存當然支援海量資料的儲存,nosql非關係型資料庫表結構和關係型資料庫(如mysql)的邏輯結構、物理結構很不一樣,性質特點、應用場景也不一樣。

1)name space

命名空間,類似於關係型資料庫的 databbase 概念,每個命名空間下有多個表。hbase有兩個自帶的命名空間,分別是 hbase 和 default,hbase 中存放的是 hbase 內建的表www.cppcns.com,default 表是使用者預設使用的命名空間。

2)region

類似於關係型資料庫的表概念。不同的是,hbase 定義表時只需要宣告列族即可,不需要宣告具體的列。這意味著,往 hbase 寫入資料時,字段可以動態、按需指定。因此,和關係型資料庫相比,hbase 能夠輕鬆應對字段變更的場景。

3)row

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

4)column

hbase 中的每個列都由 column family(列族)和 column qualifier(列限定符)進行限定,例如 info:name,info:age。建表時,只需指明列族,而列限定符無需預先定義。

5)time stamp

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

6)cell

由 唯一確定的單元。cell 中的資料是沒有型別的,全部是位元組碼形式存貯。

1)region server

region server 為 region 的管理者,其實現類為 hregionserver,主要作用如下:對於資料的操作:get, put, delete;對於 region 的操作:splitregion、compactregion。

2)master

master 是所有 region server 的管理者,其實現類為 hmaster,主要作用如下:對於表的操作:create, delete, alter對於 regionserver的操作:分配 regions到每個regionserver,監控每個 regionserver程式設計客棧的狀態,負載均衡和故障轉移。

3)zookeeper

hbase 通過 zookeeper 來做 master 的高可用、regionserver 的監控、元資料的入口以及集群配置的維護等工作。

4)hdfs

hdfs 為 hbase 提供最終的底層資料儲存服務,同時為 hbase 提供高可用的支援。

初學或者測試階段對hbase操作可以使用hbase shell。增刪改查等基本命令如下:

(1)建立表

create 'test','cf'

test是表名,cf是列族名,你會發現hbase的表在新建的時候並沒有地方讓你定義列(和關係型資料庫很不一樣吧)。這是因為hbase中的列全部都是靈活的,可以隨便定義的。列只有在你插入第一條資料的時候才會生成。那麼表的屬性在**定義呢?其實hbase的所有資料屬性都是定義在列族上的。

(2)檢視表屬性

describe 'test'

輸出:hbase(main):002:0> desc 'test'

table test is enabled

test, }

column families d程式設計客棧escription

}1 row(s)

took 0.2150 seconds

可以看出對錶的描述不多,大量的是對列族的描述,列族更像是傳統關聯式資料庫中的表,而表本身反倒變成只是存放列族的空殼了。

(3)檢視表

list

輸出:hbase(main):001:0> list

table

test

test1

test2

test_ls

4 row(s)

took 0.6370 seconds

=> ["test", "test1", "test2", "test_ls"]

(4)插入資料

put 'test','row1','cf:name','jack'

這條語句的意思就是:往test表插入乙個單元格。這個單元格的rowkey為row1,也就是說它是屬於row1這個行中的乙個列。該單元格的列族為cf。該單元格的列名為name。資料值為jack。可見列是在插入資料的時候產生的,hbase中列可以自由擴充套件。表的結構中某一行可能沒有某個列,但資料並不以null替代,而是壓根沒有該單元格。這樣以稀疏k-v方式儲存資料可以大大壓縮資料儲存容量。

(5)掃瞄資料

scan 'test'

輸出:hbase(main):011:0> scan 'test'

row                   column+cell

row1                 column=cf:name, timestamp=1625911358767, value=jack

1 row(程式設計客棧s)

took 0.5670 seconds

scan命令類似於mysql中的select * from test。

(6)檢視資料

scan命令是批量讀取資料,查詢某個單元格的資料可以用get命令,

get 'test','row1','cf:name'

由於hbase底層使用鍵值對儲存資料,查詢乙個單元格的資料非常快,這和mysql也完全不同。

(7)刪除資料

delete 'test','row1','cf:name'

hbase刪除記錄並不是真的刪除了資料,而是放置了乙個墓碑標記(tombstone marker),把這個版本連同之前的版本都標記為不可見了。

(8)停用表

disable 'test'

表刪除之前要停用表

(9)刪除表

drop 'test'

hbase採用的是key/value的儲存方式,這意味著,即使隨著資料量增大,也幾乎不會導致查詢的效能下降。凡事都不可能只有優點而沒有缺點。資料分析是hbase的弱項,因為對於hbase乃至整個nosql生態圈來說,基本上都是不支援表關聯的。

不適用的場景:主要需求是資料分析,比如做報表。單錶資料量不超過千萬。建議使用mysql或者oracle資料庫。

適用的場景:單錶資料量超千萬,而且併發還挺高。資料分析需求較弱,或者不需要那麼靈活或者實時。

《hbase不睡覺書》

《hbase原理與實踐》

b站**《尚矽谷hbase教程(hbase框架快速入門)》

HBase入門教程

阿里雲大學 hbase入門教程 hbase是乙個分布式的 面向列的開源資料庫,該技術 於 fay chang 所撰寫的google bigtable 乙個結構化資料的分布式儲存系統 就像bigtable利用了google檔案系統 file system 所提供的分布式資料儲存一樣,hbase在had...

HBase入門教程

基本了解 hbase 是乙個分布式的 面向列的開源資料庫,該技術 於 fay chang 所撰寫的google bigtable 乙個結構化資料的分布式儲存系統 就像bigtable利用了google檔案系統 file system 所提供的分布式資料儲存一樣,hbase在hadoop之上提供了類似...

HBase入門教程

課程介紹 hbase是乙個分布式的 面向列的開源資料庫,該技術 於 fay chang 所撰寫的google bigtable 乙個結構化資料的分布式儲存系統 就像bigtable利用了google檔案系統 file system 所提供的分布式資料儲存一樣,hbase在hadoop之上提供了類似於...