本文將介紹一些開發(fā)以及運(yùn)維工作中經(jīng)常用到的 Hbase Shell 命令轮洋。作為開發(fā)以及運(yùn)維人員這些常用命令是需要了解并經(jīng)常使用的愕鼓,當(dāng)然可以不必將他們死記硬背下來愿题。如果在某些場景下想到需要使用某個命令堪旧,但是又不知道具體的使用方法時涩禀,可以掃一眼這篇文章(熟練使用 mysql 命令的用戶可能會覺得 hbase shell 命令的設(shè)計(jì)有點(diǎn)費(fèi)解--!)曹货。
Hbase Shell 為 Hbase 提供了一套“簡單方便”的命令行工具咆繁。使用它可以很好地與 Hbase 進(jìn)行交互,例如查看 Hbase 集群狀態(tài)顶籽、對 Hbase 數(shù)據(jù)進(jìn)行增刪改查操作等等玩般。啟動 Hbase 之后,我們可以通過 "hbase shell" 來進(jìn)入 Hbase Shell 命令行礼饱。
Hbase Shell 中運(yùn)行 help 命令可以看到有哪些命令可以使用坏为。這些命令按照功能范圍被分成了很多組(Command Groups),每組都包含了若干個命令镊绪。本文我選取幾個日常工作中常用的命令來進(jìn)行介紹(對其他命令感興趣的朋友久脯,可以逐個百度或者 google 進(jìn)行了解),這些命令主要分布在 general(通用)镰吆、ddl(data manipulation language:數(shù)據(jù)操作語言)帘撰、dml(data definition language:數(shù)據(jù)定義語言) 這些分組中。
General
- status
- version
- table_help
- whoami
status
status 命令顯示 hbase 集群的狀態(tài)万皿,包括 master摧找、region server 的數(shù)量和活躍情況,還包括集群的負(fù)載情況牢硅。
并且蹬耘,我們還可以在 status 后面加上 'simple'、'summary' 或者 'detauled' 字段來獲取更加詳細(xì)的信息减余。這里综苔,不加任何字段的 status 等同于 status 'summary'。
version
version 命令很好理解,就是查看 hbase 版本了如筛。
table_help
一些關(guān)于表操作命令的幫助介紹(Help for table-reference commands)堡牡。
whoami
查詢當(dāng)前的 hbase 用戶
DDL & DML
DDL 和 DML 這兩類命令是工作中經(jīng)常需要使用到的,并且兩者關(guān)聯(lián)性較大杨刨,所以這里將 這兩類的命令放在一起講解晤柄。
- list
- exists
- create
- describe
- put
- count
- scan
- get
- delete
- deleteall
list
列出數(shù)據(jù)庫中所有表
exists
判斷表是否存在
用法: exists '表名'
create
創(chuàng)建表
用法: create '表名','列族1','列族2'
hbase(main):007:0> create 'kooola','cf1','cf2'
例如上面的語句就創(chuàng)建了擁有兩個列族(cf1、cf2)的表妖胀,表名為kooola
describe
查看表的結(jié)構(gòu)
用法: describe '表名'
hbase(main):010:0> describe 'kooola'
Table kooola is ENABLED
kooola
COLUMN FAMILIES DESCRIPTION
{NAME => 'cf1', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLO
CKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
{NAME => 'cf2', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLO
CKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
2 row(s) in 0.0360 seconds
顯而易見芥颈,查看剛剛創(chuàng)建的 kooola 表,發(fā)現(xiàn)有兩個列族:cf1 和 cf2
put
向指定表插入數(shù)據(jù)
用法: put '表名','rowkey','列族:列名','值'赚抡。
列簇下的列不需要提前創(chuàng)建爬坑,插入值時通過'列族:列名'來指定就行,這意味著 hbase 對表結(jié)構(gòu)的要求更加靈活
hbase(main):013:0> put 'kooola','xxxxxx1','cf1:name','march'
例如上面的命令,就是向 kooola 表中插入一行數(shù)據(jù)涂臣,其中 rowkey 為 xxxxxx1盾计,cf1 列族的 name 列有一個值為 march
count
查詢表的記錄數(shù)
用法:count '表名'
hbase(main):002:0> count 'kooola'
1 row(s) in 0.0320 seconds
scan
查詢表數(shù)據(jù)
用法: scan '表名'
當(dāng)然你也可以增加一些過濾器來指定查詢條件。
我們可以認(rèn)識一些關(guān)鍵字肉康,例如 COLUMN 和 COLUMNS 進(jìn)行列族闯估、列過濾;STARTROW 和 STOPROW 用以標(biāo)識起始吼和、終止rowkey涨薪;LIMIT 指定查詢的個數(shù);VERSIONS 指定版本炫乓。
hbase(main):001:0> scan 'kooola'
查詢所有數(shù)據(jù)
scan 'kooola', {COLUMN=>'cf1'}
指定列族進(jìn)行查詢
scan 'kooola', {COLUMNS=> 'cf1:name'}
指定列進(jìn)行查詢
scan 'kooola', { STARTROW => 'xxxxxx1', LIMIT=>2, VERSIONS=>1}
rowkey 從 xxxxxx1 開始查詢 2 個版本為 1 的記錄
scan 'kooola', {COLUMNS => ['cf1', 'cf2'], LIMIT => 10, STARTROW => 'xxxxxx1'}
rowkey 從 xxxxxx1 開始查詢 10 條記錄刚夺,記錄只顯示列族為 cf1 和 cf2 的值
例外我們也可以使用 FILTER 對值進(jìn)行過濾
scan 'kooola',FILTER=>"RowFilter(=,'binary:xxxxxx1')"
查詢 rowkey 為 xxxxxx1 的記錄
scan 'kooola',FILTER=>"RowFilter(>,'binary:xxxxxx1')"
查詢 rowkey 大于 xxxxxx1 的記錄
scan 'kooola',FILTER=>"RowFilter(=,'substring:xxx1')"
查詢 rowkey 中包含 xxx1 的記錄
scan 'kooola',FILTER=>"ValueFilter(=,'binary:march')"
查詢擁有 march 值的記錄
scan 'kooola',FILTER=>"ValueFilter(=,'substring:arch')"
查詢值包含 arch 的記錄
scan 'kooola',FILTER=>"PrefixFilter('xxxx')"
查詢 rowkey 前綴為 xxxx 的記錄
get
獲取行或單元的值
用法:
get '表名','rowkey'
get '表名','rowkey','列族'
get '表名','rowkey','列族:列'
get 'kooola','xxxxxx1'
get 'kooola','xxxxxx1','cf1:name'
delete
使用 delete 命令,可以在一個表中刪除特定單元格
用法:
delete '表名', 'rowkey', '列族:列'
deleteall
使用“deleteall”命令末捣,可以刪除一行中所有單元格
deleteall '表名', 'rowkey'