Hbase shell

HBASE SHELL简介

作为入门简要介绍下HBASE SHELL命令,通过这些命令大概可以知道HBASE的存储结构和如何操作HBASE的表。本篇先介绍DDL和DML的简单命令的使用案例,相关的原理和底层逻辑不再介绍之列。
TOOLS、REPLICATION和GENERAL信息待对HBASE的架构有深入了解后再整理汇总。
HBASE SHELL汇总:
DDL
alter, create, describe, disable, drop, enable, exists, is_disabled, is_enabled, list
DML
count, delete, deleteall, get, get_counter, incr, put, scan, truncate
TOOLS
assign, balance_switch, balancer, close_region, compact, flush, major_compact, move, split, unassign, zk_dump
REPLICATION
add_peer, disable_peer, enable_peer, remove_peer, start_replication, stop_replication
GENERAL

status, version


DDL:
exists:
功能:判断指定的表是否存在
exists 'tb1'
hbase(main):015:0> exists 'wp_test'
Table wp_test does exist
0 row(s) in 0.0250 seconds
-------------------------------------
hbase(main):016:0> exists 'wp_test1'
Table wp_test1 does not exist
0 row(s) in 0.0240 seconds
例子:
list:
功能:罗列出hbase中所有的表,支持正则匹配(同HIVE的show tables)
hbase(main):020:0> list
TABLE
member
member3
test_regions
testtable
wp_test
x2
6 row(s) in 0.0300 seconds
-------------------------------------
hbase(main):022:0> list 'mem*'
TABLE
member
member3
2 row(s) in 0.0260 seconds
例子:
describe:
功能:展示制定的表的具体描述信息,包括表名和column families的信息,没有包含row的信息(功能同HIVE的describe)
hbase(main):009:0> describe 'wp_test'
DESCRIPTION ENABLED
{NAME => 'wp_test', FAMILIES => [{NAME => 'id', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', COMPRESSION => ' false
NONE', VERSIONS => '3', TTL => '2147483647', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}, {
NAME => 'name', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', COMPRESSION => 'NONE', VERSIONS => '3', TTL => '
2147483647', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}]}
1 row(s) in 0.0340 seconds
这里的'ENABLED'字段没有任何参考价值,就算disable一张表,describe后还是enabled。
例子:
create:
官方例子:
hbase> create 't1', {NAME => 'f1', VERSIONS => 5}
hbase> create 't1', {NAME => 'f1'}, {NAME => 'f2'}, {NAME => 'f3'}
功能:创建HBASE的表,必须传入的参数为:表名+column famliy名。column family除了指定名称,一些配置参数也可以在建表时指定:BLOOMFILTER, REPLICATION_SCOPE,COMPRESSION,VERSIONS,TTL,BLOCKSIZE,IN_MEMORY,BLOCKCACHE(这些参数还没研究,不做详细说明)
2011年12月31日
16:14
分区日常工作的第1 页
hbase> create 't1', {NAME => 'f1'}, {NAME => 'f2'}, {NAME => 'f3'}
hbase> # The above in shorthand would be the following:
hbase> create 't1', 'f1', 'f2', 'f3'
hbase> create 't1', {NAME => 'f1', VERSIONS => 1, TTL => 2592000, BLOCKCACHE => true}
hbase(main):014:0> create 'wp_test','id','name'
0 row(s) in 1.1770 seconds
这样就创建了一张hbase的表wp_test,表里有两个family: id; name。family里具体列的信息这里没有指定。想看表结构就可以直接describe 'wp_test'
例子:
disable:
功能:使指定的表失效。目前只知道drop前必须disable,待研究HBASE的data model后disable应该会有更多的作用。
hbase(main):017:0> disable 'wp_test'
0 row(s) in 2.0400 seconds
disable成功了,如果不确定表是否被disable过,可以用is_disabled命令
例子:
is_disabled:
功能:判断制定的表是否失效,如果失效返回true,否则返回false(当表不存在时,也返回false),此命令和is_enabled对应,此命令返回true,彼命令就返回false,反之亦然
hbase(main):018:0> is_disabled 'wp_test'
true
0 row(s) in 0.0140 seconds
例子:
drop:
功能:删除指定的表。drop前必须要先使表disabled,即执行drop前要执行disable
------------------没有disable的结果------------------------------
hbase(main):028:0> is_disabled 'wp_test'
false
0 row(s) in 0.0130 seconds
hbase(main):029:0> drop 'wp_test'
ERROR: Table wp_test is enabled. Disable it first.'
------------------没有disable的结果------------------------------
hbase(main):030:0> disable 'wp_test'
0 row(s) in 2.0390 seconds
hbase(main):031:0> is_disabled 'wp_test'
true
0 row(s) in 0.0150 seconds
hbase(main):032:0> drop 'wp_test'
0 row(s) in 1.1050 seconds
hbase(main):033:0> exists 'wp_test'
Table wp_test does not exist
0 row(s) in 0.0250 seconds
例子:
enable:
功能:使失效的表有效。
hbase(main):042:0> is_enabled 'wp_test'
false
0 row(s) in 0.0140 seconds
hbase(main):043:0> enable 'wp_test'
0 row(s) in 2.0420 seconds
hbase(main):044:0> is_enabled 'wp_test'
true
0 row(s) in 0.0140 seconds
------------------已有效的表可以重复使用此命令------------------------------
hbase(main):044:0> is_enabled 'wp_test'
true
0 row(s) in 0.0140 seconds
hbase(main):045:0> enable 'wp_test'
0 row(s) in 0.0260 seconds
hbase(main):046:0> is_enabled 'wp_test'
true
0 row(s) in 0.0140 seconds
例子:
is_enabled:
功能:判断制定的表是否有效,如果有效返回true,否则返回false(当表不存在时,返回true),此命令和is_disabled对应,此命令返回true,彼命令就返回false,反之亦然
hbase(main):053:0> is_enabled 'wp_test'
true
0 row(s) in 0.0140 seconds
因为当表不存在时,is_enabled也返回true,所以不能盲目的认为返回true,就代表表有效
hbase(main):056:0> exists 'wp_test'
Table wp_test does not exist
0 row(s) in 0.0310 seconds
hbase(main):057:0> is_enabled 'wp_test'
true
0 row(s) in 0.0140 seconds
例子:
alter:(等真正体验过alter每个元素的效果后补充)
官方例子:
To change or add the 'f1' column family in table 't1' from defaults
功能:修改column family的信息。
分区日常工作的第2 页
To change or add the 'f1' column family in table 't1' from defaults
to instead keep a maximum of 5 cell VERSIONS, do:
hbase> alter 't1', NAME => 'f1', VERSIONS => 5
To delete the 'f1' column family in table 't1', do:
hbase> alter 't1', NAME => 'f1', METHOD => 'delete'
or a shorter version:
hbase> alter 't1', 'delete' => 'f1'
You can also change table-scope attributes like MAX_FILESIZE
MEMSTORE_FLUSHSIZE, READONLY, and DEFERRED_LOG_FLUSH.
For example, to change the max size of a family to 128MB, do:
hbase> alter 't1', METHOD => 'table_att', MAX_FILESIZE => '134217728'
There could be more than one alteration in one command:
hbase> alter 't1', {NAME => 'f1'}, {NAME => 'f2', METHOD => 'delete'}

例子:


DML:
put:
功能:向HBASE表中插入数据。语法:put table_name,row_key,column_family1,value1[,column_family2,value2,...][,timestamp]
hbase(main):006:0> put 'wp_test','1','id','001'
0 row(s) in 0.1630 seconds
hbase(main):007:0> put 'wp_test','1','name','hugh.wangp'
0 row(s) in 0.0200 seconds
hbase(main):008:0> scan 'wp_test'
ROW COLUMN+CELL
1 column=id:, timestamp=1325298164708, value=001
1 column=name:, timestamp=1325298179649, value=hugh.wangp
1 row(s) in 0.0600 seconds
-------------------------如上还没体现出family的概念---------------------
hbase(main):009:0> put 'wp_test','1','name:first','hugh'
0 row(s) in 0.0170 seconds
hbase(main):010:0> put 'wp_test','1','name:last','wangp'
0 row(s) in 0.0200 seconds
hbase(main):011:0> scan 'wp_test'
ROW COLUMN+CELL
1 column=id:, timestamp=1325298164708, value=001
1 column=name:, timestamp=1325298179649, value=hugh.wangp
1 column=name:first, timestamp=1325298260659, value=hugh
1 column=name:last, timestamp=1325298276137, value=wangp
1 row(s) in 0.0270 seconds
如上的就是把name作为column family来看待,name有两个列:first,last,可以独立分别操作first和last
例子:
get:
官方例子:
hbase> get 't1', 'r1'
hbase> get 't1', 'r1', {TIMERANGE => [ts1, ts2]}
hbase> get 't1', 'r1', {COLUMN => 'c1'}
hbase> get 't1', 'r1', {COLUMN => ['c1', 'c2', 'c3']}
hbase> get 't1', 'r1', {COLUMN => 'c1', TIMESTAMP => ts1}
hbase> get 't1', 'r1', {COLUMN => 'c1', TIMERANGE => [ts1, ts2], VERSIONS => 4}
hbase> get 't1', 'r1', {COLUMN => 'c1', TIMESTAMP => ts1, VERSIONS => 4}
hbase> get 't1', 'r1', 'c1'
hbase> get 't1', 'r1', 'c1', 'c2'
hbase> get 't1', 'r1', ['c1', 'c2']
功能:获取column或者cell的内容。必须传入的参数:表名+rowkey,可选column families、timestamp、timerange、versions
-------------------------获取rowkey='1'的所有column和cell的信息---------------------
hbase(main):029:0> get 'wp_test','1'
COLUMN CELL
id: timestamp=1325298164708, value=001
name: timestamp=1325298179649, value=hugh.wangp
name:first timestamp=1325298260659, value=hugh
name:last timestamp=1325298276137, value=wangp
-------------------------获取rowkey='1'的特定列族的信息------------------------------
hbase(main):041:0> get 'wp_test','1',{COLUMN => 'id'}
COLUMN CELL
id: timestamp=1325298164708, value=001
1 row(s) in 0.0170 seconds
简单方式
hbase(main):042:0> get 'wp_test','1','id'
COLUMN CELL
id: timestamp=1325298164708, value=001
1 row(s) in 0.0190 seconds
-------------------------获取rowkey='1'的多列族的信息--------------------------------
hbase(main):043:0> get 'wp_test','1',{COLUMN => ['id','name:first']}
COLUMN CELL
id: timestamp=1325298164708, value=001
name:first timestamp=1325298260659, value=hugh
2 row(s) in 0.0190 seconds
简单方式
hbase(main):044:0> get 'wp_test','1','id','name:first'
COLUMN CELL
id: timestamp=1325298164708, value=001
例子:
分区日常工作的第3 页
id: timestamp=1325298164708, value=001
name:first timestamp=1325298260659, value=hugh
2 row(s) in 0.0180 seconds
incr:
获取incr列的value必须用get_counter获得,因为incr的列是二进制编码,get得到的不是十进制展示的结果,get_counter可以展示十进制的结果。
功能:对table/row/column做递增/递减操作,可以解决事务问题。incr的列不能使用put来操作,put过的列也不能用incr,因为put和incr的存储方式不一致。
hbase(main):096:0> incr 'wp_test','1','id:num2'
COUNTER VALUE = 1
hbase(main):100:0> get 'wp_test','1','id:num2'
COLUMN CELL
id:num2 timestamp=1325308653284, value=\x00\x00\x00\x00\x00\x00\x00\x01
1 row(s) in 0.0180 seconds
hbase(main):102:0> get_counter 'wp_test','1','id:num2'
COUNTER VALUE = 1
例子:
get_counter:
功能:返回incr列的值。不能返回非incr的值,即时反悔了非incr的值,但是这个值没有任何参考意义
hbase(main):102:0> get_counter 'wp_test','1','id:num2'
COUNTER VALUE = 1
--------------------------非incr的列的异常值-------------------------------
hbase(main):104:0> get_counter 'wp_test','1','id'
ERROR: java.lang.IllegalArgumentException: offset (0) + length (8) exceed the capacity of the array: 3
Here is some help for this command:
Return a counter cell value at specified table/row/column coordinates.
A cell cell should be managed with atomic increment function oh HBase
and the data should be binary encoded. Example:
hbase> get_counter 't1', 'r1', 'c1'
hbase(main):105:0> get_counter 'wp_test','1','name'
COUNTER VALUE = 7527036049373487470
例子:
scan:
官方例子:
hbase> scan '.META.'
hbase> scan '.META.', {COLUMNS => 'info:regioninfo'}
hbase> scan 't1', {COLUMNS => ['c1', 'c2'], LIMIT => 10, STARTROW => 'xyz'}
hbase> scan 't1', {FILTER => org.apache.hadoop.hbase.filter.ColumnPaginationFilter.new(1, 0)}
hbase> scan 't1', {COLUMNS => 'c1', TIMERANGE => [1303668804, 1303668904]}
hbase> scan 't1', {COLUMNS => ['c1', 'c2'], CACHE_BLOCKS => false}
功能:扫描表。必须指定表名。可选参数:COLUMN、STARTROW、STOPROW、LIMIT、TIMESTAMP、TIMERANGE、MAXLENGTH、FILTER、CACHE_BLOCKS
--------------------------wp_test全表数据-------------------------------
hbase(main):138:0> scan 'wp_test'
ROW COLUMN+CELL
1 column=id:, timestamp=1325300968316, value=500
1 column=id:num, timestamp=1325301193197, value=10
1 column=id:num1, timestamp=1325308303837, value=20
1 column=id:num2, timestamp=1325308653284, value=\x00\x00\x00\x00\x00\x00\x00\x01
1 column=name:, timestamp=1325298179649, value=hugh.wangp
1 column=name:first, timestamp=1325298260659, value=hugh
1 column=name:last, timestamp=1325298276137, value=wangp
2 column=id:, timestamp=1325309756816, value=502
2 column=name:first, timestamp=1325309767489, value=hugh
2 column=name:last, timestamp=1325309777355, value=wang
2 row(s) in 0.0310 seconds
--------------------------wp_test只取一个rowkey的结果-------------------------------
hbase(main):140:0> scan 'wp_test',{LIMIT=>1}
ROW COLUMN+CELL
1 column=id:, timestamp=1325300968316, value=500
1 column=id:num, timestamp=1325301193197, value=10
1 column=id:num1, timestamp=1325308303837, value=20
1 column=id:num2, timestamp=1325308653284, value=\x00\x00\x00\x00\x00\x00\x00\x01
1 column=name:, timestamp=1325298179649, value=hugh.wangp
1 column=name:first, timestamp=1325298260659, value=hugh
1 column=name:last, timestamp=1325298276137, value=wangp
1 row(s) in 0.0280 seconds
--------------------------wp_test从rowkey='1'开始取所有name的数据-------------------------------
hbase(main):142:0> scan 'wp_test',{COLUMN=>'name',STARTROW=>'1'}
ROW COLUMN+CELL
1 column=name:, timestamp=1325298179649, value=hugh.wangp
1 column=name:first, timestamp=1325298260659, value=hugh
1 column=name:last, timestamp=1325298276137, value=wangp
2 column=name:first, timestamp=1325309767489, value=hugh
2 column=name:last, timestamp=1325309777355, value=wang
2 row(s) in 0.0260 seconds
-----------------------wp_test从rowkey='1'开始取1个row所有name的数据----------------------------
ROW COLUMN+CELL
1 column=name:, timestamp=1325298179649, value=hugh.wangp
1 column=name:first, timestamp=1325298260659, value=hugh
1 column=name:last, timestamp=1325298276137, value=wangp
1 row(s) in 0.0220 seconds
----------------wp_test截止到rowkey='2'(不包含rowkey='2')取所有name的数据---------------------
hbase(main):144:0>scan 'wp_test',{COLUMN=>'name',STOPROW=>'2'}
ROW COLUMN+CELL
1 column=name:, timestamp=1325298179649, value=hugh.wangp
例子:涉及参数:COLUMN、STARTROW、STOPROW、LIMIT
分区日常工作的第4 页
1 column=name:, timestamp=1325298179649, value=hugh.wangp
1 column=name:first, timestamp=1325298260659, value=hugh
1 column=name:last, timestamp=1325298276137, value=wangp
1 row(s) in 0.0230 seconds
count:
官方例子:
hbase> count 't1'
hbase> count 't1', INTERVAL => 100000
hbase> count 't1', CACHE => 1000
hbase> count 't1', INTERVAL => 10, CACHE => 1000
功能:返回HBASE表中的rowkey的数量。
hbase(main):150:0> count 'wp_test'
2 row(s) in 0.0330 seconds
INTERVAL和CACHE参数还没测试,等有大数据量后测试补充这部分信息。
例子:
delete:
官方例子:
hbase> delete 't1', 'r1', 'c1', ts1
功能:删除一张table特定row的特定column,可指定tiemstamp
----------------删除表wp_test中rowkey='1'的列为id_num1的数据---------------------
hbase(main):156:0> scan 'wp_test'
ROW COLUMN+CELL
1 column=id:, timestamp=1325300968316, value=500
1 column=id:num, timestamp=1325301193197, value=10
1 column=id:num1, timestamp=1325308303837, value=20
1 column=id:num2, timestamp=1325308653284, value=\x00\x00\x00\x00\x00\x00\x00\x01
1 column=name:, timestamp=1325298179649, value=hugh.wangp
1 column=name:first, timestamp=1325298260659, value=hugh
1 column=name:last, timestamp=1325298276137, value=wangp
2 column=id:, timestamp=1325309756816, value=502
2 column=name:first, timestamp=1325309767489, value=hugh
2 column=name:last, timestamp=1325309777355, value=wang
2 row(s) in 0.0340 seconds
hbase(main):157:0> delete 'wp_test','1','id:num1'
0 row(s) in 0.0180 seconds
hbase(main):158:0> scan 'wp_test'
ROW COLUMN+CELL
1 column=id:, timestamp=1325300968316, value=500
1 column=id:num, timestamp=1325301193197, value=10
1 column=id:num2, timestamp=1325308653284, value=\x00\x00\x00\x00\x00\x00\x00\x01
1 column=name:, timestamp=1325298179649, value=hugh.wangp
1 column=name:first, timestamp=1325298260659, value=hugh
1 column=name:last, timestamp=1325298276137, value=wangp
2 column=id:, timestamp=1325309756816, value=502
2 column=name:first, timestamp=1325309767489, value=hugh
2 column=name:last, timestamp=1325309777355, value=wang
2 row(s) in 0.0290 seconds
例子:
deleteall:
官方例子:
hbase> deleteall 't1', 'r1'
hbase> deleteall 't1', 'r1', 'c1'
hbase> deleteall 't1', 'r1', 'c1', ts1
功能:删除HBASE表的rowkey的所有数据、rowkey的列的所有数据、rowkey的列的一个timestamp的所有数据
----------------删除表wp_test中rowkey='1'的所有数据---------------------
hbase(main):162:0> scan 'wp_test'
ROW COLUMN+CELL
1 column=id:, timestamp=1325300968316, value=500
1 column=id:num, timestamp=1325301193197, value=10
1 column=id:num2, timestamp=1325308653284, value=\x00\x00\x00\x00\x00\x00\x00\x01
1 column=name:, timestamp=1325298179649, value=hugh.wangp
1 column=name:first, timestamp=1325298260659, value=hugh
1 column=name:last, timestamp=1325298276137, value=wangp
2 column=id:, timestamp=1325309756816, value=502
2 column=name:first, timestamp=1325309767489, value=hugh
2 column=name:last, timestamp=1325309777355, value=wang
2 row(s) in 0.0310 seconds
hbase(main):168:0> deleteall 'wp_test','2'
0 row(s) in 0.0150 seconds
hbase(main):169:0> scan 'wp_test'
ROW COLUMN+CELL
1 column=id:, timestamp=1325300968316, value=500
1 column=id:num, timestamp=1325301193197, value=10
1 column=id:num2, timestamp=1325308653284, value=\x00\x00\x00\x00\x00\x00\x00\x01
1 column=name:, timestamp=1325298179649, value=hugh.wangp
1 column=name:first, timestamp=1325298260659, value=hugh
1 column=name:last, timestamp=1325298276137, value=wangp
1 row(s) in 0.0250 seconds
例子:
truncate:
功能:是disable+drop+create的组合,先disable表、然后drop表、最后recreate表(实现的功能同RAC的trucnate table)
hbase(main):171:0> scan 'wp_test'
ROW COLUMN+CELL
1 column=id:, timestamp=1325300968316, value=500
1 column=id:num, timestamp=1325301193197, value=10
例子:
分区日常工作的第5 页
1 column=id:num, timestamp=1325301193197, value=10
1 column=id:num2, timestamp=1325308653284, value=\x00\x00\x00\x00\x00\x00\x00\x01
1 column=name:, timestamp=1325298179649, value=hugh.wangp
1 column=name:first, timestamp=1325298260659, value=hugh
1 column=name:last, timestamp=1325298276137, value=wangp
1 row(s) in 0.0280 seconds
hbase(main):172:0> truncate 'wp_test'
Truncating 'wp_test' table (it may take a while):
-Disabling table...
-Dropping table...
-Creating table...
0 row(s) in 4.3920 seconds
hbase(main):173:0> scan 'wp_test'
ROW COLUMN+CELL
0 row(s) in 1.0330 seconds
分区日常工作的第6 页
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值