HBase的shell客户端及常用命令介绍(二)

 

1.开启客户端

[root@linux01 /]# hbase shell
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/apps/hadoop-3.2.1/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/apps/hbase-2.2.5/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
HBase Shell
Use "help" to get list of supported commands.
Use "exit" to quit this interactive shell.
For Reference, please visit: http://hbase.apache.org/2.0/book.html#shell
Version 2.2.5, rf76a601273e834267b55c0cda12474590283fd4c, 2020年 05月 21日 星期四 18:34:40 CST
Took 0.0060 seconds 

客户端的基本命令

hbase(main):002:0> status    --查看当前hbase的状态--
1 active master, 0 backup masters, 3 servers, 0 dead, 0.6667 average load
Took 1.0122 seconds                                                                               
hbase(main):003:0> version    --查看版本--
2.2.5, rf76a601273e834267b55c0cda12474590283fd4c, 2020年 05月 21日 星期四 18:34:40 CST
Took 0.0007 seconds                                                                               
hbase(main):004:0> whoami    --当前用户
root (auth:SIMPLE)
    groups: root
Took 0.0429 seconds 

2.help查看所有命令

help "commands"  查看命令的使用方法(常用)

注意:单引号双引号通用

hbase(main):013:0> help "list"
List all user tables in hbase. Optional regular expression parameter could
be used to filter the output. Examples:

  hbase> list
  hbase> list 'abc.*'
  hbase> list 'ns:abc.*'
  hbase> list 'ns:.*'

3.namespace

hbase中没有数据库的概念,他是使用namespace来实现数据库的作用

4.create创建表(指定列族)

hbase(main):006:0> create "tb_user" , "cf1"    --表名tb_user,列族cf1--
Created table tb_user
Took 1.5089 seconds                                                                               
=> Hbase::Table - tb_user

5.desc/describe查看表结构

hbase(main):007:0> desc "tb_user"
Table tb_user is ENABLED                                                                          
tb_user                                                                                           
COLUMN FAMILIES DESCRIPTION                                                                       
{NAME => 'cf1', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false'
, KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', TT
L => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_O
N_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPE
N => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '65536'}                  

1 row(s)

QUOTAS                                                                                            
0 row(s)
Took 0.4748 seconds  

VERSIONS是版本数,默认是1;TTL(time to live)是生存时间,默认forever,是永远活着(不过期),可设置时间,默认单位是秒,到期后数据会自动删除。

6.list查看所有的表

类似mysql中的show tables;

hbase(main):008:0> list
TABLE                                                                                             
tb_user                                                                                           
1 row(s)
Took 0.0479 seconds                                                                               
=> ["tb_user"]

7.put插入数据

类似mysql的insert,也可看做是map集合的put操作,每次put一行数据,如果说put的行键、列族、属性和之前的重叠,则会覆盖掉之前的值,相当于更新操作。

hbase(main):009:0> put "tb_user","rk01","cf1:name","zs" 
                  --表名,rk(row key)行键(行号),cf(column family)列族:属性名,属性值--
                                                                             
hbase(main):010:0> put "tb_user","rk01","cf1:age","55"
                                                                             
hbase(main):011:0> put "tb_user","rk01","cf1:address","bj"

8.scan查看表的所有数据

类似mysql的select  *from tb_name;

hbase(main):012:0> scan "tb_user"
ROW                       COLUMN+CELL                                                             
 rk01                     column=cf1:address, timestamp=1598513203386, value=bj                   
 rk01                     column=cf1:age, timestamp=1598513191614, value=55                       
 rk01                     column=cf1:name, timestamp=1598513171722, value=zs 

9.delete/deleteall删除数据

delete只能删除具体的某一个属性

  hbase(main):015:0> help 'delete'
  hbase> delete 'ns1:t1', 'r1', 'c1', ts1
  hbase> delete 't1', 'r1', 'c1', ts1
  hbase> delete 't1', 'r1', 'c1', ts1, {VISIBILITY=>'PRIVATE|SECRET'}
hbase(main):017:0> scan 'tb_user'
ROW                       COLUMN+CELL                                                             
 rk01                     column=cf1:address, timestamp=1598513203386, value=bj                   
 rk01                     column=cf1:age, timestamp=1598513191614, value=55                       
 rk01                     column=cf1:name, timestamp=1598513171722, value=zs                      
1 row(s)
                                                                              
hbase(main):018:0> delete 'tb_user','rk01','cf1:name' --删除指定表、指定行、指定列族中的指定属性--
                                                                              
hbase(main):019:0> scan 'tb_user'
ROW                       COLUMN+CELL                                                             
 rk01                     column=cf1:address, timestamp=1598513203386, value=bj                   
 rk01                     column=cf1:age, timestamp=1598513191614, value=55                       
1 row(s)
                                                                           
hbase(main):020:0> delete 'tb_user'    --删除表会报错--
ERROR: wrong number of arguments (1 for 3)
                                                                               
hbase(main):021:0> delete 'tb_user','rk01'    --删除某行会报错--
ERROR: wrong number of arguments (2 for 3)

deleteall可以删除某一行,功能强大点

  hbase(main):016:0> help 'deleteall'
  hbase> deleteall 'ns1:t1', 'r1'
  hbase> deleteall 't1', 'r1'
  hbase> deleteall 't1', 'r1', 'c1'
  hbase> deleteall 't1', 'r1', 'c1', ts1
  hbase> deleteall 't1', 'r1', 'c1', ts1, {VISIBILITY=>'PRIVATE|SECRET'}
hbase(main):024:0> deleteall 'tb_user','rk01'    --deleteall删除rk01行--
                                                                        
hbase(main):025:0> scan 'tb_user'
ROW                       COLUMN+CELL                                                             
0 row(s)

 

数据存储位置

在hbase的web页面上有表的信息

HDFS页面上的hdfs系统有目录

(1)put数据

(2)flush表  flush tb_name  ---> 将插入的数据写到HDFS指定的目录中

(3)hbase hfile -p -f  hfile文件的目录     查看内容

[root@linux01 ~]# hbase hfile -p -f /hbase/data/default/tb_user/28ab0fe2df98863846aa6433b1db2111/cf1/35a5b4fb860840d383db538aac6db532
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/apps/hadoop-3.2.1/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/apps/hbase-2.2.5/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
2020-08-27 16:49:42,298 INFO  [main] metrics.MetricRegistries: Loaded MetricRegistries class org.apache.hadoop.hbase.metrics.impl.MetricRegistriesImpl
K: rk01/cf1:address/1598513203386/ Put/vlen=2/seqid=9 V: bj
K: rk01/cf1:age/1598513191614/ Put/vlen=2/seqid=8 V: 55
 

数据时KV形式存储的,rk01是行,cf1是列族1,:后面是属性值,Put代表是通过put操作插入数据的,vlen是数据长度,seqid是序列号,V是对应的值。

注意:第三步,不是在hbase的shell客户端执行的,而是专用的hbase  hfile 查看文件,-p是path,-f是文件,hfile是生成的文件格式。

 

 

数据的更新和删除操作本质上都是向新的Hfile文件中追加内容,并会在文件内容的K中打上相应的操作标记,更新的话就是Put,删除的话就是Delete/DeleteColumn(墓碑标记)。

因为hbase是基于HDFS存储文件的,而HDFS中的文件是不能随意删除和修改的,所以他会将更新和删除等改变文件内容的一些操作,追加到一个新的Hfile文件中,我们在执行这些操作后,flush一下,就会在HDFS的文件中看到新生成的Hfile文件,而这里的新Hfile中的数据操作就会打上相应的删除和更新的标记。

 

delete删除属性后产生的新Hfile文件内容展示

[root@linux01 ~]# hbase hfile -p -f /hbase/data/doit17/tb_user/bc162fcd8bd0966c76f3ccc03dcb56de/cf1/6f698d00e3784131aca221279f666516       ---删除后生成的新Hfile文件--
……
K: rk01/cf1:name/1598671249766/Delete/vlen=0/seqid=11 V:

 

deleteall删除列族后产生的新Hfile文件内容展示

[root@linux01 ~]# hbase hfile -p -f /hbase/data/doit17/tb_user/bc162fcd8bd0966c76f3ccc03dcb56de/cf2/24a1621c22ec4f778a13c93da66cd6d3
……
K: rk02/cf2:/1598672206987/DeleteColumn/vlen=0/seqid=12 V: 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值