HBase Shell

当HBase集群配置好启动后,就可以使用HBase的Shell对HBase进行各种操作,如建表、添加记录、添加列族和删除表等。需使用HBase的bin目录下的HBase命令才能进入,具体操作如下:

进入HBase

[gznc@master ~]$ cd /home/gznc/hbase-0.98.7-hadoop2
[gznc@master hbase-0.98.7-hadoop2]$ bin/hbase shell
2016-11-01 19:40:21,367 INFO  [main] Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 0.98.7-hadoop2, r800c23e2207aa3f9bddb7e9514d8340bcfb89277, Wed Oct  8 15:58:11 PDT 2014
hbase(main):001:0> 

帮助命令help

hbase(main):001:0> help
HBase Shell, version 0.98.7-hadoop2, r800c23e2207aa3f9bddb7e9514d8340bcfb89277, Wed Oct  8 15:58:11 PDT 2014
Type 'help "COMMAND"', (e.g. 'help "get"' -- the quotes are necessary) for help on a specific command.
Commands are grouped. Type 'help "COMMAND_GROUP"', (e.g. 'help "general"') for help on a command group.

COMMAND GROUPS:
  Group name: general
  Commands: status, table_help, version, whoami

  Group name: ddl
  Commands: alter, alter_async, alter_status, create, describe, disable, disable_all, drop, drop_all, enable, enable_all, exists, get_table, is_disabled, is_enabled, list, show_filters

  Group name: namespace
  Commands: alter_namespace, create_namespace, describe_namespace, drop_namespace, list_namespace, list_namespace_tables

  Group name: dml
  Commands: append, count, delete, deleteall, get, get_counter, incr, put, scan, truncate, truncate_preserve

  Group name: tools
  Commands: assign, balance_switch, balancer, catalogjanitor_enabled, catalogjanitor_run, catalogjanitor_switch, close_region, compact, flush, hlog_roll, major_compact, merge_region, move, split, trace, unassign, zk_dump

  Group name: replication
  Commands: add_peer, disable_peer, enable_peer, list_peers, list_replicated_tables, remove_peer, set_peer_tableCFs, show_peer_tableCFs

  Group name: snapshots
  Commands: clone_snapshot, delete_snapshot, list_snapshots, rename_snapshot, restore_snapshot, snapshot

  Group name: security
  Commands: grant, revoke, user_permission

  Group name: visibility labels
  Commands: add_labels, clear_auths, get_auths, set_auths, set_visibility

SHELL USAGE:
Quote all names in HBase Shell such as table and column names.  Commas delimit
command parameters.  Type <RETURN> after entering a command to run it.
Dictionaries of configuration used in the creation and alteration of tables are
Ruby Hashes. They look like this:

  {'key1' => 'value1', 'key2' => 'value2', ...}

and are opened and closed with curley-braces.  Key/values are delimited by the
'=>' character combination.  Usually keys are predefined constants such as
NAME, VERSIONS, COMPRESSION, etc.  Constants do not need to be quoted.  Type
'Object.constants' to see a (messy) list of all constants in the environment.

If you are using binary keys or values and need to enter them in the shell, use
double-quote'd hexadecimal representation. For example:

  hbase> get 't1', "key\x03\x3f\xcd"
  hbase> get 't1', "key\003\023\011"
  hbase> put 't1', "test\xef\xff", 'f1:', "\x01\x33\x40"

The HBase shell is the (J)Ruby IRB with the above HBase-specific commands added.
For more on the HBase Shell, see http://hbase.apache.org/docs/current/book.html
hbase(main):002:0> 

查看HBaseRegionServer运行状态

hbase(main):002:0> status
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/gznc/hbase-0.98.7-hadoop2/lib/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/gznc/hadoop-2.5.2/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
2016-11-01 19:44:41,122 WARN  [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
3 servers, 0 dead, 0.6667 average load

hbase(main):003:0> 

查看HBase版本

hbase(main):004:0> version
0.98.7-hadoop2, r800c23e2207aa3f9bddb7e9514d8340bcfb89277, Wed Oct  8 15:58:11 PDT 2014

查看当前用户

hbase(main):005:0> whoami
gznc (auth:SIMPLE)
    groups: gznc

Hbase数据库操作命令
创建表

行健basic_infoschool_info
namegenderbirthdayconnectaddresscollegeclasssubject

该表有两个列族,分别是basic_info和school_info,分别用来存储基本信息和学校信息。basic_info包含5个列name、gender、birthday、connect、address,分别代表姓名、性别、出生年月、联系方式、住址;school_info包含三个列college、class、subject,分别代表所属学院、班级、专业。

创建表students,格式如下:
create ‘表名’ ‘列族1’,’列族2’,…..‘列族n’

hbase(main):008:0> create 'students' ,'stu_id','basic_info','school_info'
0 row(s) in 1.0970 seconds
=> Hbase::Table - students

查看所有表

hbase(main):009:0> list
TABLE                                                                           
students                                                                        
1 row(s) in 0.0660 seconds
=> ["students"]

查看表结构

hbase(main):003:0> describe 'students'
DESCRIPTION                                          ENABLED                    
 'students', {NAME => 'basic_info', DATA_BLOCK_ENCOD true                       
 ING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SC                            
 OPE => '0', VERSIONS => '1', COMPRESSION => 'NONE',                            
  MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETE                            
 D_CELLS => 'false', BLOCKSIZE => '65536', IN_MEMORY                            
  => 'false', BLOCKCACHE => 'true'}, {NAME => 'schoo                            
 l_info', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER                            
  => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1                            
 ', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL                             
 => 'FOREVER', KEEP_DELETED_CELLS => 'false', BLOCKS                            
 IZE => '65536', IN_MEMORY => 'false', BLOCKCACHE =>                            
  'true'}, {NAME => 'stu_id', DATA_BLOCK_ENCODING =>                            
  'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE =>                            
  '0', VERSIONS => '1', COMPRESSION => 'NONE', MIN_V                            
 ERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELL                            
 S => 'false', BLOCKSIZE => '65536', IN_MEMORY => 'f                            
 alse', BLOCKCACHE => 'true'}                                                   
1 row(s) in 0.2400 seconds

删除列族stu_id

删除列族要使用alter命令,用alter命令删除列族的格式有如下几种:
alter ‘表名’ , NAME=>’列族名’,METHOD=>’delete’
alter ‘表名’ , {NAME=>’列族名’,METHOD=>’delete’}
alter ‘表名’ , ‘delete’=> ‘列族名’

hbase(main):005:0> alter 'students','delete'=>'stu_id'
Updating all regions with the new schema...
0/1 regions updated.
1/1 regions updated.
Done.
0 row(s) in 2.4690 seconds

此版本的HBase中,删除一个表的列族不需要使表在非使用的状态可以直接进行操作,在之前的某些版本中则不行,直接删除会出现以下错误

ERROR:Table memberis enable.Disable it first before altering

这时需要先disable要操作的表,删除后,在进行enable操作,格式为disable/enable ‘表名’

注意:ddl命令是区分大小写的,像ddl中的alter,create, drop, enable等都必需用小写。而{}中的属性名都必需用大写。
查看列族stu_id删除是否成功

hbase(main):006:0> describe 'students'
DESCRIPTION                                          ENABLED                    
 'students', {NAME => 'basic_info', DATA_BLOCK_ENCOD true                       
 ING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SC                            
 OPE => '0', VERSIONS => '1', COMPRESSION => 'NONE',                            
  MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETE                            
 D_CELLS => 'false', BLOCKSIZE => '65536', IN_MEMORY                            
  => 'false', BLOCKCACHE => 'true'}, {NAME => 'schoo                            
 l_info', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER                            
  => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1                            
 ', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL                             
 => 'FOREVER', KEEP_DELETED_CELLS => 'false', BLOCKS                            
 IZE => '65536', IN_MEMORY => 'false', BLOCKCACHE =>                            
  'true'}                                                                       
1 row(s) in 0.1090 seconds

删除一个表
删除一个表必须先disable,否则会出现错误,删除表使用drop命令,格式为

hbase(main):011:0> create 't','s'
0 row(s) in 0.5130 seconds

=> Hbase::Table - t
hbase(main):012:0> list
TABLE                                                                           
students                                                                        
t                                                                               
2 row(s) in 0.0710 seconds

=> ["students", "t"]

hbase(main):014:0> disable 't'
0 row(s) in 1.4960 seconds

hbase(main):015:0> drop 't'
0 row(s) in 0.2660 seconds

查询一个表是否存在

hbase(main):016:0> exists 't'
Table t does not exist                                                          
0 row(s) in 0.0470 seconds

hbase(main):017:0> exists 'students'
Table students does exist                                                       
0 row(s) in 0.0750 seconds

查询一个表的使用状态

hbase(main):019:0> is_enabled 'students'
true                                                                            
0 row(s) in 0.0580 seconds

hbase(main):020:0> is_disabled 'students'
false                                                                           
0 row(s) in 0.0570 seconds

dml操作
dml操作主要是对表的记录的操作,如插入记录、查询记录等。
1.使用put命令向students表中插入记录,put命令格式如下:
put ‘表名’ ‘行键’,‘列族:列’,‘值’

hbase(main):021:0> stu = get_table 'students'
0 row(s) in 0.0040 seconds

=> Hbase::Table - students
hbase(main):022:0> stu.put '2016111','basic_info:name','YangMing'
0 row(s) in 0.4390 seconds
hbase(main):023:0> stu.put '2016111','basic_info:gender','male'
0 row(s) in 0.0130 seconds
hbase(main):024:0> stu.put '2016111','basic_info:birthday','1988-05-23'
0 row(s) in 0.0260 seconds
hbase(main):025:0> stu.put '2016111','basic_info:connect','13911111111'
0 row(s) in 0.0240 seconds
hbase(main):026:0> stu.put '2016111','basic_info:address','SiChuan-Chengdu'
0 row(s) in 0.0440 seconds
hbase(main):027:0> stu.put '2016111','school_info:college','ChengXing'
0 row(s) in 0.0340 seconds
hbase(main):028:0> stu.put '2016111','school_info:class','class 1 grade 2'
0 row(s) in 0.0120 seconds
hbase(main):029:0> stu.put '2016111','school_info:object','Software'
0 row(s) in 0.0130 seconds

注意:第一步创建了students表的引用stu,这样操作更加方便
2.使用get获取数据,get命令的格式如下:

get 表名’ , ‘行健’[, ‘列族[:列]’] 其中[ ] 为可选内容

hbase(main):033:0> get 'students','2016111'
COLUMN                CELL                                                      
 basic_info:address   timestamp=1478006969468, value=SiChuan-Chengdu            
 basic_info:birthday  timestamp=1478006906499, value=1988-05-23                 
 basic_info:connect   timestamp=1478006935108, value=13911111111                
 basic_info:gender    timestamp=1478006880018, value=male                       
 basic_info:name      timestamp=1478006860715, value=YangMing                   
 school_info:class    timestamp=1478007026804, value=class 1 grade 2            
 school_info:college  timestamp=1478007005614, value=ChengXing                  
 school_info:object   timestamp=1478007066226, value=Software                   
8 row(s) in 0.1400 seconds

获取一个行键的所有数据:

hbase(main):034:0> stu.get '2016111'
COLUMN                CELL                                                      
 basic_info:address   timestamp=1478006969468, value=SiChuan-Chengdu            
 basic_info:birthday  timestamp=1478006906499, value=1988-05-23                 
 basic_info:connect   timestamp=1478006935108, value=13911111111                
 basic_info:gender    timestamp=1478006880018, value=male                       
 basic_info:name      timestamp=1478006860715, value=YangMing                   
 school_info:class    timestamp=1478007026804, value=class 1 grade 2            
 school_info:college  timestamp=1478007005614, value=ChengXing                  
 school_info:object   timestamp=1478007066226, value=Software                   
8 row(s) in 0.0960 seconds

从以上输出可以看出,各列族数据是按列排好序的。
获取一个行键某列族的所有数据:

hbase(main):035:0> stu.get '2016111','basic_info'
COLUMN                CELL                                                      
 basic_info:address   timestamp=1478006969468, value=SiChuan-Chengdu            
 basic_info:birthday  timestamp=1478006906499, value=1988-05-23                 
 basic_info:connect   timestamp=1478006935108, value=13911111111                
 basic_info:gender    timestamp=1478006880018, value=male                       
 basic_info:name      timestamp=1478006860715, value=YangMing                   
5 row(s) in 0.0380 seconds

获取一个行键某列族最新的数据

hbase(main):036:0> stu.get '2016111','basic_info:name'
COLUMN                CELL                                                      
 basic_info:name      timestamp=1478006860715, value=YangMing                   
1 row(s) in 0.0260 seconds

3.为某条数据增加一个版本

hbase(main):037:0> stu.put '2016111','basic_info:connect','Tel:13252367856'
0 row(s) in 0.0250 seconds
hbase(main):038:0> stu.get '2016111','basic_info:connect'
COLUMN                CELL                                                      
 basic_info:connect   timestamp=1478019142670, value=Tel:13252367856            
1 row(s) in 0.0220 seconds

4.通过时间戳获取两个版本的数据
花括号里面的属性必须要大写

hbase(main):039:0> stu.get '2016111',{COLUMN=>'basic_info:connect',TIMESTAMP=>1478019142670}
COLUMN                CELL                                                      
 basic_info:connect   timestamp=1478019142670, value=Tel:13252367856            
1 row(s) in 0.0250 seconds
hbase(main):040:0> stu.get '2016111',{COLUMN=>'basic_info:connect',TIMESTAMP=>1478006935108}
COLUMN                CELL                                                      
 basic_info:connect   timestamp=1478006935108, value=13911111111                
1 row(s) in 0.0800 seconds

5.全表扫描

hbase(main):041:0> stu.scan
ROW                   COLUMN+CELL                                               
 2016111              column=basic_info:address, timestamp=1478006969468, value=
                      SiChuan-Chengdu                                           
 2016111              column=basic_info:birthday, timestamp=1478006906499, value
                      =1988-05-23                                               
 2016111              column=basic_info:connect, timestamp=1478019142670, value=
                      Tel:13252367856                                           
 2016111              column=basic_info:gender, timestamp=1478006880018, value=m
                      ale                                                       
 2016111              column=basic_info:name, timestamp=1478006860715, value=Yan
                      gMing                                                     
 2016111              column=school_info:class, timestamp=1478007026804, value=c
                      lass 1 grade 2                                            
 2016111              column=school_info:college, timestamp=1478007005614, value
                      =ChengXing                                                
 2016111              column=school_info:object, timestamp=1478007066226, value=
                      Software                                                  
1 row(s) in 0.0850 seconds

6.删除某行键类的某列

hbase(main):005:0> stu.delete '2016111','basic_info:connect'
0 row(s) in 0.4540 seconds
hbase(main):006:0> stu.get '2016111','basic_info'
COLUMN                CELL                                                      
 basic_info:address   timestamp=1478006969468, value=SiChuan-Chengdu            
 basic_info:birthday  timestamp=1478006906499, value=1988-05-23                 
 basic_info:gender    timestamp=1478006880018, value=male                       
 basic_info:name      timestamp=1478006860715, value=YangMing                   
4 row(s) in 0.1330 seconds

7.以行键为单位,查询表有多少行

hbase(main):007:0> stu.count
1 row(s) in 0.1070 seconds
=> 1

8.清空整张表

hbase(main):008:0> truncate 'students'
Truncating 'students' table (it may take a while):
 - Disabling table...
 - Dropping table...
 - Creating table...
0 row(s) in 2.9440 seconds

注意:
truncate 操作其实是先disable某张表,然后删除表,在根据表的结构重新创建同名称的表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值