【HBase笔记】HBase Shell操作(三)

1. 基本操作

1.1 进入Hbase客户端命令行

执行命令root@master:/opt/module/cdh/hbase-1.3.1/bin# ./hbase shell进入客户端。
【HBase笔记】HBase Shell操作(三)_第1张图片

1.2 查看帮助命令

执行help
得到结果:

hbase(main):001:0> help
HBase Shell, version 1.3.1, r930b9a55528fe45d8edce7af42fef2d35e77677a, Thu Apr  6 19:36:54 PDT 2017
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, locate_region, 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, get_splits, incr, put, scan, truncate, truncate_preserve

  Group name: tools
  Commands: assign, balance_switch, balancer, balancer_enabled, catalogjanitor_enabled, catalogjanitor_run, catalogjanitor_switch, close_region, compact, compact_rs, flush, major_compact, merge_region, move, normalize, normalizer_enabled, normalizer_switch, split, splitormerge_enabled, splitormerge_switch, trace, unassign, wal_roll, zk_dump

  Group name: replication
  Commands: add_peer, append_peer_tableCFs, disable_peer, disable_table_replication, enable_peer, enable_table_replication, get_peer_config, list_peer_configs, list_peers, list_replicated_tables, remove_peer, remove_peer_tableCFs, set_peer_tableCFs, show_peer_tableCFs

  Group name: snapshots
  Commands: clone_snapshot, delete_all_snapshot, delete_snapshot, delete_table_snapshots, list_snapshots, list_table_snapshots, restore_snapshot, snapshot

  Group name: configuration
  Commands: update_all_config, update_config

  Group name: quotas
  Commands: list_quotas, set_quota

  Group name: security
  Commands: grant, list_security_capabilities, revoke, user_permission

  Group name: procedures
  Commands: abort_procedure, list_procedures

  Group name: visibility labels
  Commands: add_labels, clear_auths, get_auths, list_labels, 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/book.html
hbase(main):002:0> 

最重要的是:

  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, locate_region, show_filters

  Group name: dml
  Commands: append, count, delete, deleteall, get, get_counter, get_splits, incr, put, scan, truncate, truncate_preserve
1.3 查看表列表

执行命令list
【HBase笔记】HBase Shell操作(三)_第2张图片

2. 表的操作-DDL

2.1 创建表-create

执行命令:create 'stu','info1','info2',创建了一个stu表,有两个列簇。

2.2 查看表结构-describe

执行命令:describe 'stu'
在这里插入图片描述
这里面的VERSIONS是1 表示数据版本号只能存放一个版本。只能返回一个数据。这个是可以修改的,可以定义存放的版本数。比如是2,则留下数据的两个版本号。

2.3 变更表信息-alter

修改的最小单元是列簇。执行命令:alter 'stu',{NAME=>'info1',VERSIONS=>3}
【HBase笔记】HBase Shell操作(三)_第3张图片
改表结构还是ddl操作,修改的是元数据。
查看表结构:
【HBase笔记】HBase Shell操作(三)_第4张图片

2.4 删除表

要想删除表,需要先disable该表,然后才能drop表。
执行命令:disable 'student'
【HBase笔记】HBase Shell操作(三)_第5张图片
删除表:drop 'student'

这样就能删除成功了。

并且创建表必须要有至少一个列族,否则会创建失败。

2.5 命名空间-namespace
  1. 查看命名空间,命令是list_namespace
    【HBase笔记】HBase Shell操作(三)_第6张图片

  2. 创建命名空间,命令是create_namespace
    【HBase笔记】HBase Shell操作(三)_第7张图片
    查看列表【HBase笔记】HBase Shell操作(三)_第8张图片

  3. 在命名空间bigdata中创建表

    执行命令:create 'bigdata:stu','info1',一定是命名空间:表名 【HBase笔记】HBase Shell操作(三)_第9张图片
    呢么如何删除命名空间?首先要清楚命名空间的所有表,然后删除命名空间。
    【HBase笔记】HBase Shell操作(三)_第10张图片

2. 表的操作-DML

2.1 插入数据-put

插入命令:put '表','rowkey','列名','value值'
【HBase笔记】HBase Shell操作(三)_第11张图片
示例:put 'stu','1001','info1:name','zhanglaing'
在这里插入图片描述

2.2 查询数据表-scan,get

scan的示例有很多:
【HBase笔记】HBase Shell操作(三)_第12张图片
scan既可以整表扫描,也可以使用过滤条件等等
scan查询示例:
在这里插入图片描述
scan可以直接查询表,但是get不可以,get需要指定表名rowkey
get示例:
【HBase笔记】HBase Shell操作(三)_第13张图片
操作示例:
在这里插入图片描述
stu表插入一些数据,并做一些查询操作:

hbase(main):007:0> put 'stu','1001','info1:sex','male'
0 row(s) in 0.1020 seconds

hbase(main):008:0> put 'stu','1001','info2:addr','shanghai'
0 row(s) in 0.0170 seconds

hbase(main):009:0> put 'stu','1002','info1:phone','1231231'
0 row(s) in 0.0360 seconds

hbase(main):010:0> put 'stu','1002','info2:addr','beijing'
0 row(s) in 0.0070 seconds

hbase(main):011:0> scan 'stu'
ROW                          COLUMN+CELL                                                                       
 1001                        column=info1:name, timestamp=1577015138401, value=zhanglaing                      
 1001                        column=info1:sex, timestamp=1577016467811, value=male                             
 1001                        column=info2:addr, timestamp=1577016497189, value=shanghai                        
 1002                        column=info1:phone, timestamp=1577016555983, value=1231231                        
 1002                        column=info2:addr, timestamp=1577016586094, value=beijing                         
2 row(s) in 0.0260 seconds

hbase(main):012:0> get 'stu','1001','info1'
COLUMN                       CELL                                                                              
 info1:name                  timestamp=1577015138401, value=zhanglaing                                         
 info1:sex                   timestamp=1577016467811, value=male                                               
1 row(s) in 0.0260 seconds

hbase(main):013:0> get 'stu','1001'
COLUMN                       CELL                                                                              
 info1:name                  timestamp=1577015138401, value=zhanglaing                                         
 info1:sex                   timestamp=1577016467811, value=male                                               
 info2:addr                  timestamp=1577016497189, value=shanghai                                           
1 row(s) in 0.0090 seconds

hbase(main):014:0> get 'stu','1001','info1:name'
COLUMN                       CELL                                                                              
 info1:name                  timestamp=1577015138401, value=zhanglaing                                         
1 row(s) in 0.0670 seconds

hbase(main):015:0> 

呢么如果我们使用scan来做这些操作:

hbase(main):001:0> scan 'stu'
ROW                          COLUMN+CELL                                                                       
 1001                        column=info1:name, timestamp=1577017030315, value=lisi                            
 1001                        column=info1:sex, timestamp=1577016467811, value=male                             
 1001                        column=info2:addr, timestamp=1577016497189, value=shanghai                        
 1002                        column=info1:phone, timestamp=1577016555983, value=1231231                        
 1002                        column=info2:addr, timestamp=1577016586094, value=beijing                         
2 row(s) in 0.4540 seconds

hbase(main):002:0> scan 'stu',{COLUMNS => ['info1:name', 'info1:sex']}
ROW                          COLUMN+CELL                                                                       
 1001                        column=info1:name, timestamp=1577017030315, value=lisi                            
 1001                        column=info1:sex, timestamp=1577016467811, value=male                             
1 row(s) in 0.0650 seconds

hbase(main):003:0> scan 'stu',{COLUMNS=>'info1:name'}
ROW                          COLUMN+CELL                                                                       
 1001                        column=info1:name, timestamp=1577017030315, value=lisi                            
1 row(s) in 0.0130 seconds

hbase(main):004:0> scan 'stu',{STARTROW=>'1001'}
ROW                          COLUMN+CELL                                                                       
 1001                        column=info1:name, timestamp=1577017030315, value=lisi                            
 1001                        column=info1:sex, timestamp=1577016467811, value=male                             
 1001                        column=info2:addr, timestamp=1577016497189, value=shanghai                        
 1002                        column=info1:phone, timestamp=1577016555983, value=1231231                        
 1002                        column=info2:addr, timestamp=1577016586094, value=beijing                         
2 row(s) in 0.0450 seconds

hbase(main):005:0> scan 'stu',{STARTROW=>'1001',STOPROW=>'1002'}
ROW                          COLUMN+CELL                                                                       
 1001                        column=info1:name, timestamp=1577017030315, value=lisi                            
 1001                        column=info1:sex, timestamp=1577016467811, value=male                             
 1001                        column=info2:addr, timestamp=1577016497189, value=shanghai                        
1 row(s) in 0.0310 seconds

hbase(main):006:0> 

这里注意一下,rowkey是按照字典排序的,当我们插入10010时,你会发现他会在1001的后面

【HBase笔记】HBase Shell操作(三)_第14张图片

2.3 修改数据-put

HBase是没有UPDATE这种命令,但是可以通过put通过添加新数据去覆盖旧数据。
修改示例:
【HBase笔记】HBase Shell操作(三)_第15张图片
呢么以前的旧数据在哪里?其实还在Region Servers的内存中,可以通过scan显示出来:
scan 'stu',{RAW=>true,VERSIONS=>10}表示显示全量数据,并且显示版本号在10个以内的数据。
【HBase笔记】HBase Shell操作(三)_第16张图片
显示多个版本也可以使用get命令:
get 'stu','1001',{COLUMN=>'info1:name',VERSIONS=>3}
【HBase笔记】HBase Shell操作(三)_第17张图片
在我们查询数据的时候,只显示时间戳最大的数据。

还有一点,这里的版本VERSIONS是指HBase会存储的最大的版本数,但是如果设置的默认存储版本为1,呢么这里的VERSIONS设置多少都只能显示一个。所以这里的数字要小于等于设置的版本数,即:alter 'stu',{NAME=>'info',VERSIONS=>3}这里的数字3。(我写的是3,可以使其他数字)。

2.4 删除数据-delete,deleteall,truncate

delete删除示例:(三个参数)
【HBase笔记】HBase Shell操作(三)_第18张图片
删除操作其实也是在插入新数据,只不过插入的不是value而是type类型。
操作示例:
扫描一下整个表:
【HBase笔记】HBase Shell操作(三)_第19张图片
我们删除1001,info1:name
【HBase笔记】HBase Shell操作(三)_第20张图片
可以看到我们已经没有这条数据了,但是在全量显示中是怎么显示的呢?
【HBase笔记】HBase Shell操作(三)_第21张图片
1001 column=info1:name, timestamp=1577021426252, type=DeleteColumn
没错,在后面插入了一个type=DeleteColumn的 数据,当我们扫描整张表的时候获取最大的时间戳,得到了这一条数据,但是是个删除标记,所以不会显示该列数据。
验证:(添加一条数据,但是时间戳在删除的时间戳小几秒)
【HBase笔记】HBase Shell操作(三)_第22张图片
执行delete 'stu','1001','info1',在命令行是没有效果的,但是在API中是可以删除的。
【HBase笔记】HBase Shell操作(三)_第23张图片

如果想删除一整行数据,可以使用deleteall
【HBase笔记】HBase Shell操作(三)_第24张图片
操作示例deleteall 'stu','1002'
【HBase笔记】HBase Shell操作(三)_第25张图片
如果需要清楚整个表,呢么就使用truncate
操作实例truncate 'stu'
【HBase笔记】HBase Shell操作(三)_第26张图片
先禁掉表,再删除表。

最后总结

无论是增删改查使用的最重要的就是时间戳!!!

你可能感兴趣的:(HBase)