Hbase 常用Shell命令
阿新 • • 發佈:2020-12-29
一:Hbase常用Shell命令表
help | 檢視命令的使用描述 | help '命令名' |
whoami | 身份(root、user) | whoami |
version | 返回hbase版本資訊 | version |
status | 返回hbase叢集的狀態資訊 | status |
table_help | 檢視如何操作表 | table_help |
create | 建立表 | create '表名', '列族名1', '列族名2', '列族名N' |
alter | 修改列族 | 新增列族:alter '表名', NAME=>'列族名' 刪除列族:alter '表名', {NAME=> '列族名', METHOD=> 'delete'} |
describe | 顯示錶相關的詳細資訊 | describe '表名' |
list | 列出hbase中存在的所有表 | list |
exists | 測試表是否存在 | exists '表名' |
put | 新增或修改的表的值 | put '表名', '行鍵', '列族名', '列值' put '表名', '行鍵', '列族名:列名', '列值' |
scan | 通過對錶的掃描來獲取對用的值 | scan '表名' 掃描某個列族:scan '表名',{COLUMN=>'列族名',FORMATTER =>'toString'} 掃描某個列族的某個列:scan '表名', {COLUMN=>'列族名:列名'} 查詢同一個列族的多個列: scan '表名', {COLUMNS => [ '列族名1:列名1', '列族名1:列名2' …]} |
get | 獲取行或單元(cell)的值 | get '表名', '行鍵' get '表名', '行鍵', '列族名' |
count | 統計表中行的數量 | count '表名' |
incr | 增加指定錶行或列的值 | incr '表名', '行鍵', '列族:列名', 步長值 |
get_counter | 獲取計數器 | get_counter '表名', '行鍵', '列族:列名' |
delete | 刪除指定物件的值(可以為表,行,列對應的值,另外也可以指定時間戳的值) | 刪除列族的某個列: delete 表名', '行鍵', '列族名:列名' |
deleteall | 刪除指定行的所有元素值 | deleteall '表名', '行鍵' |
truncate | 重新建立指定表(清空表) | truncate '表名' |
enable | 使表有效 | enable '表名' |
is_enabled | 是否啟用 | is_enabled '表名' |
disable | 使表無效(刪除表之前先禁用) | disable '表名' |
is_disabled | 是否無效 | is_disabled '表名' |
drop | 刪除表 | drop的表必須是disable的 disable '表名' drop '表名' |
shutdown | 關閉hbase叢集(與exit不同) | |
tools | 列出hbase所支援的工具 | |
exit | 退出hbase shell |
二:Hbase操作
DDL操作
(1) 檢視資料庫中有哪些表
hbase(main):005:0> list
TABLE
person
(2) 查看錶屬性資訊
hbase(main):007:0> describe 'person'
# 或者
hbase(main):007:0> desc 'person'
Table person is ENABLED
person
COLUMN FAMILIES DESCRIPTION
{
NAME => 'age',
BLOOMFILTER => 'ROW',
VERSIONS => '1',
IN_MEMORY => 'false',
KEEP_DELETED_CELLS => 'FALSE',
DATA_BLOCK_ENCODING => 'NONE',
TTL => 'FOREVER',
COMPRESSION => 'NONE',
MIN_VERSIONS => '0',
BLOCKCACHE => 'true',
BLOCKSIZE => '65536',
REPLICATION_SCOPE => '0'
}
# 其中的屬性的意義:
NAME:列族名
VERSIONS:最大版本號
MIN_VERSIONS:最小版本號
TTL(Time To Live):存活時間
IN_MEMORY:是否開啟快取,預設false,應該開啟,否則與BLOCKCACHE衝突
BLOCKCACHE:讀快取是否開啟,預設開啟,64M
(3) 建表
# create '表名', '列族1', '列族2'...
hbase(main):002:0> create 'person', 'name', 'age'
# 等價於
hbase(main):002:0> create 'person',{NAME=>'name' },{NAME=>'age'}
# 建表時可以指定表屬性資訊
hbase(main):005:0> create 'user_info',{NAME=>'base_info',VERSIONS=>3 },{NAME=>'extra_info',IN_MEMORY=>'true'}
(4) alter 修改表
--(1) 增加列族
alter 'table_name', 'add_family'
# 或者
alter 'table_name', {NAME => 'add_family'}
# 當然,新增加的列可以設定屬性,比如
alter 'table_name', {NAME => 'add_family', VERSIONS => 3}
--(2) 刪除列族
alter 'table_name', {NAME => 'delete_family', METHOD => 'delete'}
或者
alter 'table_name', 'delete' => 'delete_family'
--(3) 新增列族f1同時刪除列族f2
alter 'user', {NAME => 'f1'}, {NAME => 'f2', METHOD => 'delete'}
--(4) 修改列族
# 將user表的f1列族版本號改為5
alter 'user', NAME => 'f1', VERSIONS => 5
(5) 判斷表是否存在
exists 'table_name'
(6) 禁用表與啟用表
--(1) 禁用表
disable 'table_name'
--(2) 查看錶是否禁用
is_disabled 'table_name'
--(3) 啟用表
enable 'table_name'
--(4) 查看錶是否啟用
is enabled 'table_name'
(7) 刪除表
# hbase的某些版本,在刪除表前,需要先禁用表
disable 'table_name'
drop 'table_name'
DML 操作
(1) 插入資料
--(1)
# put '表名','rowkey','列族名:列名','值'
put 'person','0001','name:firstname', 'Jed'
--(2) 可以指定時間戳,否則預設為系統當前時間
put 'person','0002','info:age',20,1482077777778
(2) 查詢某行
--(1)
get 'person', '0001'
--(2) 查詢某行,指定列名
get 'person', '0001', 'name:firstname'
--(3) 查詢某行,新增其他限制條件
# 查詢person表中,rowkey為'0001'的這一行,只顯示name:firstname這一列,並且只顯示最新的3個版本
get 'person', '0001', {COLUMNS => 'name:firstname', VERSIONS => 3}
# 檢視指定列的內容,並限定顯示最新的3個版本和時間範圍
get 'person', '0001', {COLUMN => 'name:first', VERSIONS => 3, TIMERANGE => [1392368783980, 1392380169184]}
# 查詢person表中,rowkey為'rk0001',且某列的內容為'中國'的記錄
scan'person', 'rk0001', {FILTER => "ValueFilter(=, 'binary:中國')"}
(3) 全表掃描
--(1) 掃描全表
scan 'person'
--(2) 掃描時指定列族
scan 'person', {COLUMNS => 'name'}
--(3) 掃描時指定列族,並限定顯示最新的5個版本的內容
scan 'person', {COLUMNS => 'name', VERSIONS => 5}
--(4) 設定開啟Raw模式,開啟Raw模式會把那些已新增刪除標記但是未實際刪除的資料也顯示出來
scan 'person', {COLUMNS => 'name', RAW => true}
--(5) 列的過濾
# 查詢user表中列族為info和data的資訊
scan 'user', {COLUMNS => ['info', 'data']}
# 查詢user表中列族為info,列名為name、列族為data,列名為pic的資訊
scan 'user', {COLUMNS => ['info:name', 'data:pic']}
# 查詢user表中列族為info,列名為name的資訊,並且版本最新的5個
scan 'user', {COLUMNS => 'info:name', VERSIONS => 5}
# 查詢user表中列族為info和data且列名含有a字元的資訊
scan 'user', {COLUMNS => ['info', 'data'], FILTER => "(QualifierFilter(=,'substring:a'))"}
# 查詢user表中列族為info,rk範圍是[rk0001, rk0003)的資料
scan 'people', {COLUMNS => 'info', STARTROW => 'rk0001', ENDROW => 'rk0003'}
# 查詢user表中row key以rk字元開頭的
scan 'user',{FILTER=>"PrefixFilter('rk')"}
# 查詢user表中指定時間範圍的資料
scan 'user', {TIMERANGE => [1392368783980, 1392380169184]}
scan的用法很多,引數,過濾條件可以很多,各種組合, 在此不列舉過多的例子,參考 help 'scan'
(4) 刪除資料
delete 'table_name', 'rowkey', 'family:column'
(5) 清空表
轉載於https://www.cnblogs.com/wendi/p/14158541.html
truncate 'table_name'