HBase包含可以与HBase进行通信的Shell。 HBase使用Hadoop文件系统来存储数据。它拥有一个主服务器和区域服务器。数据存储将在区域(表)的形式。这些区域被分割并存储在区域服务器。
主服务器管理这些区域服务器,所有这些任务发生在HDFS。
通用命令
-
status: 提供HBase的状态,例如,服务器的数量。
-
version: 提供正在使用HBase版本。
-
table_help: 表引用命令提供帮助。
-
whoami: 提供有关用户的信息。
数据定义语言
- create: 创建一个表。
- list: 列出HBase的所有表。
- disable: 禁用表。
- is_disabled: 验证表是否被禁用。
- enable: 启用一个表。
- is_enabled: 验证表是否已启用。
- describe: 提供了一个表的描述。
- alter: 改变一个表。
- exists: 验证表是否存在。
- drop: 从HBase中删除表。
- drop_all: 丢弃在命令中给出匹配“regex”的表。
- Java Admin API: 在此之前所有的上述命令,Java提供了一个通过API编程来管理实现DDL功能。在这个org.apache.hadoop.hbase.client包中有HBaseAdmin和HTableDescriptor 这两个重要的类提供DDL功能。
数据操纵语言
- put: 把指定列在指定的行中单元格的值在一个特定的表。
- get: 取行或单元格的内容。
- delete: 删除表中的单元格值。
- deleteall: 删除给定行的所有单元格。
- scan: 扫描并返回表数据。
- count: 计数并返回表中的行的数目。
- truncate: 禁用,删除和重新创建一个指定的表。
- Java client API: 在此之前所有上述命令,Java提供了一个客户端API来实现DML功能,CRUD(创建检索更新删除)操作更多的是通过编程,在org.apache.hadoop.hbase.client包下。 在此包HTable 的 Put和Get是重要的类。
via ['vaiə] 通过,经过,经由
invoke 调用,恳求
hbase(main):005:0> table_help
Help for table-reference commands.
You can either create a table via 'create' and then manipulate the table via commands like 'put', 'get', etc. See the standard help information for how to use each of these commands.
However, as of 0.96, you can also get a reference to a table, on which you can invoke commands. For instance, you can get create a table and keep around a reference to it via:
hbase> t = create 't', 'cf'
Or, if you have already created the table, you can get a reference to it:
hbase> t = get_table 't'
You can do things like call 'put' on the table:
hbase> t.put 'r', 'cf:q', 'v'
which puts a row 'r' with column family 'cf', qualifier 'q' and value 'v' into table t.
To read the data out, you can scan the table:
hbase> t.scan
which will read all the rows in table 't'.
Essentially, any command that takes a table name can also be done via table reference. Other commands include things like: get, delete, deleteall, get_all_columns, get_counter, count, incr. These functions, along with the standard JRuby object methods are also available via tab completion.
For more information on how to use each of these commands, you can also just type:
hbase> t.help 'scan'
which will output more information on how to use that command.
You can also do general admin actions directly on a table; things like enable, disable, flush and drop just by typing:
hbase> t.enable
hbase> t.flush
hbase> t.disable
hbase> t.drop
Note that after dropping a table, your reference to it becomes useless and further usage is undefined (and not recommended).
Took 0.0004 seconds
创建表test,只有一个列族cf
hbase(main):006:0> create 'test','cf'
Created table test
Took 2.6122 seconds
=> Hbase::Table - test
hbase(main):007:0> list
TABLE
test
1 row(s)
Took 0.0329 seconds
=> ["test"]
查看hdfs如下:
drwxr-xr-x - root supergroup 0 2018-05-15 17:44 /hbase/data/default/test
drwxr-xr-x - root supergroup 0 2018-05-15 17:44 /hbase/data/default/test/.tabledesc
-rw-r--r-- 1 root supergroup 472 2018-05-15 17:44 /hbase/data/default/test/.tabledesc/.tableinfo.0000000001
drwxr-xr-x - root supergroup 0 2018-05-15 17:44 /hbase/data/default/test/.tmp
drwxr-xr-x - root supergroup 0 2018-05-15 17:44 /hbase/data/default/test/2047326b0daeea60e8b91a4ad60f79d6
-rw-r--r-- 1 root supergroup 39 2018-05-15 17:44 /hbase/data/default/test/2047326b0daeea60e8b91a4ad60f79d6/.regioninfo
drwxr-xr-x - root supergroup 0 2018-05-15 17:44 /hbase/data/default/test/2047326b0daeea60e8b91a4ad60f79d6/cf
drwxr-xr-x - root supergroup 0 2018-05-15 17:44 /hbase/data/default/test/2047326b0daeea60e8b91a4ad60f79d6/recovered.edits
-rw-r--r-- 1 root supergroup 0 2018-05-15 17:44 /hbase/data/default/test/2047326b0daeea60e8b91a4ad60f79d6/recovered.edits/2.seqid
写入数据
hbase(main):028:0> put 'test','row1','cf:a','100'
Took 0.0094 seconds
hbase(main):029:0> put 'test','row2','cf:b','200'
Took 0.0076 seconds
hbase(main):030:0> put 'test','row3','cf:c','800'
Took 0.0041 seconds
以put 'test','row1','cf:a','100' 为例:
行key为row1, 列为 cf:a, 值是 100。HBase中的列是由 列族前缀和列的名字组成的,以
冒号间隔。例如这一行的列名就是a.
检查插入情况
hbase(main):046:0> scan 'test'
ROW COLUMN+CELL
row1 column=cf:a, timestamp=1526378383424, value=100
row2 column=cf:b, timestamp=1526378395396, value=200
row3 column=cf:c, timestamp=1526378406372, value=800
3 row(s)
Took 0.0060 seconds
hbase(main):047:0> get 'test','row1'
COLUMN CELL
cf:a timestamp=1526378383424, value=100
1 row(s)
Took 0.0068 seconds
hbase(main):054:0> is_disabled 'test'
false
Took 0.0071 seconds
=> 1
hbase(main):055:0> is_enabled 'test'
true
Took 0.0052 seconds
=> true
hbase(main):056:0> describe 'test'
Table test is ENABLED
test
COLUMN FAMILIES DESCRIPTION
{NAME => 'cf', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_O
N_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACH
E_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE'
, BLOCKCACHE => 'true', BLOCKSIZE => '65536'}
1 row(s)
Took 0.1274 seconds
hbase(main):057:0> disable 'test'
Took 0.8605 seconds
hbase(main):058:0> is_enabled 'test'
false
Took 0.0053 seconds
=> false
hbase(main):059:0> exists 'test'
Table test does exist
Took 0.0030 seconds
=> true
hbase(main):060:0> enable 'test'
Took 1.3761 seconds
hbase(main):061:0> is_enabled 'test'
true
Took 0.0052 seconds
=> true
hbase(main):062:0> drop 'test' //删除一个表需要先disable,然后才能删除,否则报错
ERROR: Table test is enabled. Disable it first.
Drop the named table. Table must first be disabled: hbase> drop 't1' hbase> drop 'ns1:t1'
Took 0.0120 seconds
hbase(main):063:0> disable 'test'
Took 0.7598 seconds
hbase(main):064:0> drop 'test'
Took 0.7568 seconds
drop_all
这个命令是用来在给出删除匹配“regex”表。它的语法如下:
hbase> drop_all 't.*'
注意:要删除表,则必须先将其禁用。
创建表
hbase(main):066:0> create 't_account','accinfo','level'
Created table t_account
Took 2.3567 seconds
=> Hbase::Table - t_account
创建数据
使用put命令,可以插入行到一个表。它的语法如下:
put ’<table name>’,’row1’,’<colfamily:colname>’,’<value>’
hbase(main):072:0> put 't_account','1','accinfo:name','zhangsan'
Took 0.0093 seconds
hbase(main):073:0> put 't_account','1','accinfo:age','30'
Took 0.0029 seconds
hbase(main):074:0> put 't_account','1','level:viplevel','10'
Took 0.0035 seconds
hbase(main):075:0> put 't_account','1','level:userlevel','100'
Took 0.0024 seconds
hbase(main):084:0> put 't_account','2','accinfo:name','tianyongtao'
Took 0.0054 seconds
hbase(main):085:0> put 't_account','2','accinfo:age','80'
Took 0.0027 seconds
hbase(main):086:0> put 't_account','2','level:userlevel','98'
Took 0.0036 seconds
hbase(main):087:0> put 't_account','2','level:viplevel','9'
Took 0.0029 seconds
hbase(main):088:0> scan 't_account'
ROW COLUMN+CELL
1 column=accinfo:age, timestamp=1526451900687, value=30
1 column=accinfo:name, timestamp=1526451871354, value=zhangsan
1 column=level:userlevel, timestamp=1526451966368, value=100
1 column=level:viplevel, timestamp=1526451955128, value=10
2 column=accinfo:age, timestamp=1526452258712, value=80
2 column=accinfo:name, timestamp=1526452242674, value=tianyongtao
2 column=level:userlevel, timestamp=1526452289706, value=98
2 column=level:viplevel, timestamp=1526452300609, value=9
2 row(s)
Took 0.0074 seconds
更新数据
可以使用put命令更新现有的单元格值。
put ‘table name’,’row ’,'Column family:column name',’new value’
hbase(main):094:0> put 't_account','2','level:viplevel','10'
Took 0.0070 seconds
hbase(main):095:0> get 't_account','2','level:viplevel'
COLUMN CELL
level:viplevel timestamp=1526452599771, value=10
使用 get 命令,可以同时获取一行数据
get ’<table name>’,’row1’
同样可以过去某一列族或者某一列的数据
hbase(main):097:0> get 't_account','2'
COLUMN CELL
accinfo:age timestamp=1526452258712, value=80
accinfo:name timestamp=1526452242674, value=tianyongtao
level:userlevel timestamp=1526452289706, value=98
level:viplevel timestamp=1526452599771, value=10
1 row(s)
Took 0.0064 seconds
hbase(main):091:0> get 't_account','2','accinfo'
COLUMN CELL
accinfo:age timestamp=1526452258712, value=80
accinfo:name timestamp=1526452242674, value=tianyongtao
1 row(s)
Took 0.0067 seconds
hbase(main):092:0> get 't_account','2','level'
COLUMN CELL
level:userlevel timestamp=1526452289706, value=98
level:viplevel timestamp=1526452300609, value=9
1 row(s)
Took 0.0068 seconds
hbase(main):093:0> get 't_account','2','level:viplevel'
COLUMN CELL
level:viplevel timestamp=1526452300609, value=9
1 row(s)
Took 0.0286 seconds
删除行中的某个列值
hbase(main):098:0> get 't_account','1'
COLUMN CELL
accinfo:age timestamp=1526451900687, value=30
accinfo:name timestamp=1526451871354, value=zhangsan
level:userlevel timestamp=1526451966368, value=100
level:viplevel timestamp=1526451955128, value=10
1 row(s)
Took 0.0147 seconds
hbase(main):099:0> delete 't_account','1','level:viplevel'
Took 0.1561 seconds
hbase(main):100:0> get 't_account','1'
COLUMN CELL
accinfo:age timestamp=1526451900687, value=30
accinfo:name timestamp=1526451871354, value=zhangsan
level:userlevel timestamp=1526451966368, value=100
1 row(s)
hbase(main):148:0> get 't_account','2',COLUMN=>'level'
COLUMN CELL
level:userlevel timestamp=1526452289706, value=98
level:viplevel timestamp=1526457133619, value=99
1 row(s)
Took 0.0041 seconds
hbase(main):149:0> get 't_account','2',COLUMN=>'level:userlevel'
COLUMN CELL
level:userlevel timestamp=1526452289706, value=98
1 row(s)
Took 0.0053 seconds
删除行:
hbase(main):104:0> deleteall 't_account','1'
Took 0.0036 seconds
hbase(main):105:0> get 't_account','1'
COLUMN CELL
0 row(s)
Took 0.0093 seconds
删除表中所有数据:
truncate 'tbname'
其具体过程是:disable table -> drop table -> create table
修改表结构必须先disable
alter用于更改现有表的命令。使用此命令可以更改列族的单元,设定最大数量和删除表范围运算符,并从表中删除列家族。
更改列族单元格的最大数目
hbase(main):136:0> disable 't_account'
Took 0.7510 seconds
hbase(main):137:0> alter 't_account',{NAME=>'accinfo'},{NAME=>'accinf',VERSIONS=>'6'}
Updating all regions with the new schema...
All regions updated.
Done.
Took 1.5712 seconds
hbase(main):138:0> enable 't_account'
Took 1.2413 seconds
hbase(main):176:0> scan 't_account'
ROW COLUMN+CELL
1 column=accinfo:age, timestamp=1526458674060, value=42
1 column=accinfo:name, timestamp=1526458662013, value=xiaoma
1 column=level:userlevel, timestamp=1526458701559, value=56
1 column=level:viplevel, timestamp=1526458723924, value=6
2 column=accinfo:age, timestamp=1526452258712, value=80
2 column=accinfo:name, timestamp=1526452242674, value=tianyongtao
2 column=level:userlevel, timestamp=1526452289706, value=98
2 column=level:viplevel, timestamp=1526457133619, value=99
2 row(s)
Took 0.0062 seconds
scan指定列以及起始行
hbase(main):177:0> scan 't_account',{COLUMNS=>['accinfo:age','level'],LIMIT=>3,STARTROW=>'2'}
ROW COLUMN+CELL
2 column=accinfo:age, timestamp=1526452258712, value=80
2 column=level:userlevel, timestamp=1526452289706, value=98
2 column=level:viplevel, timestamp=1526457133619, value=99
1 row(s)
Took 0.0042 seconds
hbase(main):193:0> t=get_table 't_account'
Took 0.0002 seconds
=> Hbase::Table - t_account
hbase(main):194:0> t.get '1'
COLUMN CELL
accinfo:age timestamp=1526458674060, value=42
accinfo:name timestamp=1526458662013, value=xiaoma
level:userlevel timestamp=1526458701559, value=56
level:viplevel timestamp=1526458723924, value=6
1 row(s)
Took 0.0152 seconds
hbase(main):201:0> t.get '1','level'
COLUMN CELL
level:userlevel timestamp=1526458701559, value=56
level:viplevel timestamp=1526458723924, value=6
1 row(s)
Took 0.0036 seconds
hbase(main):202:0> t.get '1','level:userlevel'
COLUMN CELL
level:userlevel timestamp=1526458701559, value=56
hbase(main):203:0> t.count
2 row(s)
Took 0.3144 seconds
=> 2
hbase(main):212:0> count 't_account'
2 row(s)
Took 0.0045 seconds
=> 2
hbase(main):244:0> get 't_account','3',{COLUMN=>['level:userlevel','accinfo:name']}
COLUMN CELL
accinfo:name timestamp=1526541050391, value=bamu
level:userlevel timestamp=1526541079231, value=56
1 row(s)
Took 0.0034 seconds
hbase(main):245:0>