HBase shell常用命令(记录贴)

163 阅读5分钟

1.环境准备

hadoop 3.2.1
zookeeper 3.6.1
hbase 1.4.13
jdk 1.8
hbase hadoop 环境变量

2.HBase shell

a.进入hbase shell 控制台

hbase shell

b.创建表 create

hbase(main):012:0> create 'panda_nodes','cf'
其中 panda_nodes 为表名,cf 为列族。
其他创建命令:

Create a table with namespace=ns1 and table qualifier=t1
  hbase> create 'ns1:t1', {NAME => 'f1', VERSIONS => 5}
  
Create a table with namespace=default and table qualifier=t1
  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> create 't1', {NAME => 'f1', CONFIGURATION => {'hbase.hstore.blockingStoreFiles' => '10'}}

c.查看库中有哪些表 list

hbase(main):013:0> list 

输出 TABLE                                                                                                                             
panda_nodes                                                                                                                       
t1                                                                                                                                
test1                                                                                                                             
3 row(s) in 0.0110 seconds

d.查看表属性 desc

desc/describe 'panda_nodes'
hbase(main):017:0> describe 'panda_nodes'
Table panda_nodes is ENABLED                                                                                                      
panda_nodes                                                                                                                       
COLUMN FAMILIES DESCRIPTION                                                                                                       
{NAME => 'cf', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 
'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOP
E => '0'}                                                                                                                         

e.新建列族 alter

hbase(main):020:0> alter 'panda_nodes' , 'cf2'
Updating all regions with the new schema...
1/1 regions updated.
Done.

生产环境 先执行disable 'panda_nodes'

f.插入数据 put

hbase(main):023:0> put 'panda_nodes' ,'row1','cf:name','jack'
这条语句的意思shi:
往panda_nodes表插入一个单元格
这个单元格的rowkey为row1,属于row1这个行中的一个列
该单元格的列族为cf
数据为jack

g.更新数据 put

修改列族属性:hbase(main):002:0> alter 'panda_nodes',{NAME=>'cf',VERSIONS=>5}
保留五个版本信息
默认是保留一个版本的数据信息

在HBase中update操作是通过相同rowKey,put一条新数据
hbase(main):009:0> put 'panda_nodes','row2','cf:name','lisi'
ROW                               COLUMN+CELL                                                                                     
 row1                             column=cf:name, timestamp=1611999351907, value=hello world                                      
 row2                             column=cf:name, timestamp=1611999956907, value=lisi  
 
hbase(main):009:0> put 'panda_nodes','row2','cf:name','wangwu'
 row1                             column=cf:name, timestamp=1611999351907, value=hello world                                      
 row2                             column=cf:name, timestamp=1611999986605, value=wangwu   

h.查看表中的数据 scan table_name 类比RDBMS select * from table_name

hbase(main):027:0> scan 'panda_nodes'
ROW                               COLUMN+CELL                                                                                     
row1                             column=cf:name, timestamp=1611998682076, value=jack  

scan 条件查询
scan 'panda_nodes',{STARTROW=>'row1'}
scan 'panda_nodes',{ENDROW=>'row3'}
rowKey 是是按照字典序排序 row11 < row2
scan '表名',{属性1=>'值1',属性2=>'值2'}

i.查询单元格数据 get

hbase(main):012:0> get 'panda_nodes','row2',{COLUMN=>'cf:name',VERSIONS=>5}
COLUMN                            CELL                                                                                            
 cf:name                          timestamp=1611999986605, value=wangwu                                                           
 cf:name                          timestamp=1611999956907, value=lisi                                                             
 cf:name                          timestamp=1611999940697, value=zhangsan  
 
 hbase 中一个单元格可以存不通版本的数据 ,
 版本号是通过时间戳控制的,使用最大时间戳的数据作为整个单元格实际输出数据。timstamp 是字典序

j.删除数据 delete

hbase(main):004:0> delete 'panda_nodes','row2','cf:name'
删除并非整个单元格数据,删除row2,name最新一条的数据

删除前:
ROW                               COLUMN+CELL                                                                                     
 row1                             column=cf:name, timestamp=1611999351907, value=hello world                                      
 row2                             column=cf:name, timestamp=1611999986605, value=wangwu 
删除后:
ROW                               COLUMN+CELL                                                                                     
 row1                             column=cf:name, timestamp=1611999351907, value=hello world                                      
 row2                             column=cf:name, timestamp=1611999956907, value=lisi    
row2 name的数据还依然存在.

按照版本/时间戳删除
删除前
hbase(main):008:0> get 'panda_nodes','row2',{VERSIONS=>5,COLUMN=>'cf:name'}
COLUMN                            CELL                                                                                            
 cf:name                          timestamp=1611999956907, value=lisi                                                             
 cf:name                          timestamp=1611999954030, value=lisi\x0A\x0A                                                     
 cf:name                          timestamp=1611999940697, value=zhangsan    
 
hbase(main):009:0> delete 'panda_nodes','row2','cf:name',1611999940697
删除后
hbase(main):008:0> get 'panda_nodes','row2',{VERSIONS=>5,COLUMN=>'cf:name'}
COLUMN                            CELL                                                                                            
 cf:name                          timestamp=1611999956907, value=lisi                                                             
 cf:name                          timestamp=1611999954030, value=lisi\x0A\x0A   
 
 
 HBase的删除操作,并不是真实的删除了数据而是放置了一个墓碑标记(tombstone marker),把这个版本连同之前的版本都标记为不可见。
 会在compaction的过程中进行删除
 在真正删除前是可以查询到的
 hbase(main):012:0> scan 'panda_nodes',{RAW=>true,VERSIONS=>5}
ROW                               COLUMN+CELL                                                                                     
 row1                             column=cf:name, timestamp=1611999351907, value=hello world                                      
 row2                             column=cf:name, timestamp=1611999986605, type=Delete                                            
 row2                             column=cf:name, timestamp=1611999986605, value=wangwu                                           
 row2                             column=cf:name, timestamp=1611999956907, value=lisi                                             
 row2                             column=cf:name, timestamp=1611999954030, value=lisi\x0A\x0A                                     
 row2                             column=cf:name, timestamp=1611999940697, type=Delete                                            
 row2                             column=cf:name, timestamp=1611999940697, value=zhangsan    
 
 

k.删除整行数据

deleteall 'panda_nodes','row2'

l.停用表/启用表 disable/enable

disable 'panda_nodes'
enable 'panda_nodes'

m.删除表 drop

drop 'panda_nodes'

n.append操作

append 'panda_nodes','row1','cf:name','jr',ATTRIBUTES=>{'kid'=>'yes'}

其他常用命令

帮助命令: help 'put',help 'create'.....
查看集群状态: status 'simple'/'summary'/'detailed'
查看hbase版本: version
查看当前用户: whoami
表操作信息: table_help
判断表是否存在: exists 'panda_nodes'
查看行数据在那个region下面:locate_resion 'panda_nodes'
列出所有过滤器:show_filters
原子加减计算:incr 'panda_nodes','row6','cf1:count',3
清空表:truncate 'panda_nodes'

常用操作

scan 'panda_nodes'
(1) 指定列:scan 'panda_nodes',{COLUMN=>['cf1:name','cf1:age']}
(2) 返回最大行数量 scan 'panda_nodes',{STARTROW='row1',LIMIT=>1}

3.参考 : 《HBase 不睡觉书》 电子版:联系邮箱获取

熊猫笔记邮箱: panda_nodes@163.com