HBase
HBase 最常用的shell操作
前言
本篇博客,为大家梳理 HBase 最常用的 shell 操作。需要的小伙伴们可以自行其食!
General
进入HBase客户端命令操作界面
[root@vmmaster bin]# hbase shell
查看帮助命令
hbase(main):001:0> help
显示服务器状态
hbase(main):003:0> status
1 active master, 0 backup masters, 4 servers, 0 dead, 0.7500 average load
#结果:
一台活动主机,0个备份主机,4个服务器,0死机,平均负载0.7500
显示HBase当前用户
hbase(main):006:0> whoami
root (auth:SIMPLE)
groups: root
# 结果:
root分组下的root用户
DDL 数据定义语言
create
建库(命名空间):
create_namespace 'kb08'
建表语法:
1.完整方式:create 'NS:表名',{NAME=>'列族1名',VERSION='版本号',TTL='超时时间',BLOCKCACHE='是否缓存'},{...}...
#备注:
#VERSION: 版本号:默认最小版本号:0
#TTL: 超时设定:默认值FOREVER
#BLOCKCACHE: 设定列族是否缓存:默认为true
2.简易方式:create '[NS:]表名','列族1名','列族2名'...
例如:
# 法一
create 'kb08:handphone',{NAME=>'base',VERSION=>'0'},{NAME=>'price'}
# 法二
create 'kb08:handphone','base','price'
上述两者方式是一样的效果。
alter
更新版本号
alter 'kb08:handphone','huawei', NAME => 'base', VERSIONS => 5
删除一个列族
#法一:
alter 'kb08:handphone', NAME => 'base', METHOD => 'delete'
#法二:
alter 'kb08:handphone', 'delete' => 'base'
增加一个列族:
hbase> alter 'kb08:handphone', NAME => 'CF2', VERSIONS => 2
truncate
清空表数据
truncate 'kb08:handphone'
drop
删除表:
首先需要先让该表为disable状态,使用命令:
disable 'kb08:handphone'
然后才能drop这个表,使用命令:
drop 'kb08:handphone'
注意:如果直接drop表,会报错:Drop the named table. Table must first be disabled
describe
展示库(命名空间)信息:
describe_namespace 'kb08'
展示表结构信息:
describe 'kb08:handphone'
#结果:
Table kb08:handphone is ENABLED
kb08:handphone
COLUMN FAMILIES DESCRIPTION
{NAME => 'base', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELET
ED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NO
NE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE
=> '0'}
{NAME => 'price', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELE
TED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'N
ONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE
=> '0'}
2 row(s) in 0.0380 seconds
exists
检查表是否存在,适用于表量特别多的情况
exists 'kb08:handphone'
#结果:
Table kb08:handphone does exist
0 row(s) in 0.0250 seconds
is_enabled、is_disabled
检查表是否启用或禁用,返回值true或者false
is_disabled 'kb08:handphone'
is_enabled 'kb08:handphone'
disable/enable
禁用一张表/启用一张表
disable/enable 'kb08:handphone'
DML 数据操纵语言
put
添加数据操作:
#向kb08:handphone表中插入信息,row key为huawei,列族base中添加seriesNo列标示符,值为nova4
put 'kb08:handphone','huawei','base:seriesNo','nova4'
修改数据存在:
#向kb08:handphone表中修改信息,row key为huawei,列族base中seriesNo列标示符,修改值为p4
put 'kb08:handphone','huawei','base:seriesNo','p4'
添加其他数据操作:
put 'kb08:handphone','huawei','base:cpu','4c8t'
put 'kb08:handphone','huawei','base:resolution','1024*768'
put 'kb08:handphone','huawei','price:costPrice','1200.00'
put 'kb08:handphone','huawei','price:retailPrice','3200.00'
put 'kb08:handphone','iphone','base:seriesNo','12'
put 'kb08:handphone','iphone','base:cpu','8c8t'
put 'kb08:handphone','iphone','base:resolution','1680*1024'
put 'kb08:handphone','iphone','price:costPrice','1200.00'
put 'kb08:handphone','iphone','price:retailPrice','4800.00'
delete
<1>指定rowkey以及列名进行删除
delete 'kb08:handphone', 'huawei', 'price:costPrice'
<2>指定rowkey,列名以及字段值进行删除
delete 'kb08:handphone', 'huawei', 'price:costPrice','1200.00'
count
统计指定表的记录数
count 'kb08:handphone'
DQL 数据查询语言
get
<1>通过rowkey进行查询
hbase(main):011:0> get 'kb08:handphone','huawei'
#结果:
COLUMN CELL
base:cpu timestamp=1598942682877, value=8c16t
base:resolution timestamp=1598941643092, value=1024*768
base:seriesNo timestamp=1598940984249, value=nova4
price:costPrice timestamp=1598941652759, value=1200.00
price:retailPrice timestamp=1598941661543, value=3200.00
5 row(s) in 0.1040 seconds
<2>查看rowkey下面的某个列族的信息
hbase(main):012:0> get 'kb08:handphone','huawei','base'
#结果:
COLUMN CELL
base:cpu timestamp=1598942682877, value=8c16t
base:resolution timestamp=1598941643092, value=1024*768
base:seriesNo timestamp=1598940984249, value=nova4
3 row(s) in 0.0060 seconds
<3>查看rowkey指定列族指定字段的值
hbase(main):013:0> get 'kb08:handphone','huawei','base:cpu'
#结果:
COLUMN CELL
base:cpu timestamp=1598942682877, value=8c16t
1 row(s) in 0.0060 seconds
<4>查看rowkey指定多个列族的信息
hbase(main):014:0> get 'kb08:handphone','huawei','base','price'
#结果:
COLUMN CELL
base:cpu timestamp=1598942682877, value=8c16t
base:resolution timestamp=1598941643092, value=1024*768
base:seriesNo timestamp=1598940984249, value=nova4
price:costPrice timestamp=1598941652759, value=1200.00
price:retailPrice timestamp=1598941661543, value=3200.00
5 row(s) in 0.0060 seconds
<5>指定rowkey与列值查询
hbase(main):018:0> get 'kb08:handphone','huawei', {FILTER => "ValueFilter(=, 'binary:8c16t')"}
#结果:
COLUMN CELL
base:cpu timestamp=1598942682877, value=8c16t
1 row(s) in 0.0270 seconds
<6>指定rowkey与列值模糊查询
hbase(main):023:0> get 'kb08:handphone','huawei', {FILTER => "(QualifierFilter(=, 'substring:s'))"}
#结果:
COLUMN CELL
base:resolution timestamp=1598941643092, value=1024*768
base:seriesNo timestamp=1598940984249, value=nova4
price:costPrice timestamp=1598941652759, value=1200.00
3 row(s) in 0.0120 seconds
scan
<1>查询所有数据
hbase(main):024:0> scan 'kb08:handphone'
#结果:
ROW COLUMN+CELL
huawei column=base:cpu, timestamp=1598942682877, value=8c16t
huawei column=base:resolution, timestamp=1598941643092, value=1024*768
huawei column=base:seriesNo, timestamp=1598940984249, value=nova4
huawei column=price:costPrice, timestamp=1598941652759, value=1200.00
huawei column=price:retailPrice, timestamp=1598941661543, value=3200.00
iphone column=base:cpu, timestamp=1598941872962, value=8c8t
iphone column=base:resolution, timestamp=1598941881365, value=1680*1024
iphone column=base:seriesNo, timestamp=1598941861292, value=12
iphone column=price:costPrice, timestamp=1598941891311, value=1200.00
iphone column=price:retailPrice, timestamp=1598943314865, value=4800.00
2 row(s) in 0.0460 seconds
<2>指定表和列族或指定字段查询
1. scan 'kb08:handphone', {COLUMNS => 'base'}
# 结果:
ROW COLUMN+CELL
huawei column=base:cpu, timestamp=1598942682877, value=8c16t
huawei column=base:resolution, timestamp=1598941643092, value=1024*768
huawei column=base:seriesNo, timestamp=1598940984249, value=nova4
iphone column=base:cpu, timestamp=1598941872962, value=8c8t
iphone column=base:resolution, timestamp=1598941881365, value=1680*1024
iphone column=base:seriesNo, timestamp=1598941861292, value=12
2 row(s) in 0.0220 seconds
2. scan 'kb08:handphone', {COLUMNS => 'base:cpu'}
# 结果:
ROW COLUMN+CELL
huawei column=base:cpu, timestamp=1598942682877, value=8c16t
iphone column=base:cpu, timestamp=1598941872962, value=8c8t
2 row(s) in 0.0190 seconds
<3>指定表和多列族或多字段查询
1. scan 'kb08:handphone', {COLUMNS => ['base','price']}
# 结果:
ROW COLUMN+CELL
huawei column=base:cpu, timestamp=1598942682877, value=8c16t
huawei column=base:resolution, timestamp=1598941643092, value=1024*768
huawei column=base:seriesNo, timestamp=1598940984249, value=nova4
huawei column=price:costPrice, timestamp=1598941652759, value=1200.00
huawei column=price:retailPrice, timestamp=1598941661543, value=3200.00
iphone column=base:cpu, timestamp=1598941872962, value=8c8t
iphone column=base:resolution, timestamp=1598941881365, value=1680*1024
iphone column=base:seriesNo, timestamp=1598941861292, value=12
iphone column=price:costPrice, timestamp=1598941891311, value=1200.00
iphone column=price:retailPrice, timestamp=1598943314865, value=4800.00
2 row(s) in 0.0180 seconds
2. scan 'kb08:handphone', {COLUMNS => ['base:cpu','price:costPrice']}
#结果:
ROW COLUMN+CELL
huawei column=base:cpu, timestamp=1598942682877, value=8c16t
huawei column=price:costPrice, timestamp=1598941652759, value=1200.00
iphone column=base:cpu, timestamp=1598941872962, value=8c8t
iphone column=price:costPrice, timestamp=1598941891311, value=1200.00
2 row(s) in 0.0150 seconds
<4>指定列族与字段名以及限定版本查询
scan 'kb08:handphone', {COLUMNS => 'base:cpu', VERSIONS => 5}
#结果:
ROW COLUMN+CELL
huawei column=base:cpu, timestamp=1598942682877, value=8c16t
iphone column=base:cpu, timestamp=1598941872962, value=8c8t
2 row(s) in 0.0130 seconds
<5>指定多个列族与按照数据值模糊查询
scan 'kb08:handphone', {COLUMNS => ['base:cpu','price:costPrice'],FILTER => "(QualifierFilter(=, 'substring:s'))"}
#结果:
ROW COLUMN+CELL
huawei column=price:costPrice, timestamp=1598941652759, value=1200.00
iphone column=price:costPrice, timestamp=1598941891311, value=1200.00
2 row(s) in 0.0150 seconds
<6>rowkey的范围值查询
scan 'kb08:handphone', {COLUMNS => 'price', STARTROW => 'huawei', ENDROW => 'iphone'}
#结果:
ROW COLUMN+CELL
huawei column=price:costPrice, timestamp=1598941652759, value=1200.00
huawei column=price:retailPrice, timestamp=1598941661543, value=3200.00
1 row(s) in 0.0160 seconds
<7>指定rowkey模糊查询
#iph 开头
scan 'kb08:handphone',{FILTER=>"PrefixFilter('iph')"}
结果:
ROW COLUMN+CELL
iphone column=base:cpu, timestamp=1598941872962, value=8c8t
iphone column=base:resolution, timestamp=1598941881365, value=1680*1024
iphone column=base:seriesNo, timestamp=1598941861292, value=12
iphone column=price:costPrice, timestamp=1598941891311, value=1200.00
iphone column=price:retailPrice, timestamp=1598943314865, value=4800.00
1 row(s) in 0.0260 seconds
<8>指定数据范围值查询
scan 'kb08:handphone', {TIMERANGE => [1598941891311, 1598943314865]}
#结果:
ROW COLUMN+CELL
huawei column=base:cpu, timestamp=1598942682877, value=8c16t
iphone column=price:costPrice, timestamp=1598941891311, value=1200.00
2 row(s) in 0.0140 seconds
list
# 显示所有的表
hbase(main):007:0> list
# 显示命名空间
hbase(main):007:0> list_namespace
# 显示命名空间'kb08'下所有的表
hbase(main):010:0> list_namespace_tables 'kb08'