HBase的shell基本操作

  • HBase Shell命令基本操作
  • 进入Hbase的shell客户端
  • help命令
  • list 查看当前数据库有哪些表
  • create 创建表
  • put 插入数据
  • 查询数据操作
  • 通过rowkey进行查询
  • 查看rowkey下某个列族的信息
  • 查看rowkey指定列族指定列的值
  • 查看rowkey指定多个列族的值
  • 指定rowkey与列值过滤器查询
  • 指定rowkey与列名模糊查询
  • 查询某表所有行的数据
  • 列族查询
  • 多列族查询
  • 指定列族与某个列名查询
  • 指定多个列族与按照数据值模糊查询
  • 指定rowkey的范围查询
  • 指定rowkey模糊查询
  • 指定数据版本的范围查询
  • 更新数据库操作
  • 更新数据值
  • 更新版本号
  • 删除数据以及删除表操作
  • 指定rowkey以及列名进行删除
  • 指定rowkey,列名以及版本号进行删除
  • 删除一个列族
  • 清空表数据
  • 删除表
  • 统计一张表有多少行数据
  • HBase shell管理命令
  • 显示服务器状态
  • 显示当前用户
  • 显示当前所有表
  • 查询指定表的记录数
  • 显示表的结构信息
  • 显示表是否存在
  • 显示表是否启用\禁用
  • 启用、禁用表
  • 删除表
  • 清空表
  • 更改表的列族


HBase Shell命令基本操作

shell客户端删除光标前面的字符:Ctrl+删除键,很麻烦。最好在外面写好之后粘贴过去

进入Hbase的shell客户端

# 在hbase/bin下
hbase shell

help命令

# 从Help中可以的看到hbase command包含的种类
help

get操作 hbase hbase shell get_数据


get操作 hbase hbase shell get_get操作 hbase_02

  • 查看某个命令详解:

list 查看当前数据库有哪些表

create 创建表

  • 创健表需要指定至少1个列族,官网建议列族数为1-3
  • HBase0.96前默认版本是3,HBase0.96之后默认版本是1
  • NAMEVERSIONS大小写敏感,小写会报错
# 创建user表,包含两个列族:info data
create ‘user’,'info','data'
# 创健user表,包含两个列族:info,data。 info 版本数为3,data版本数为2
# 大于3的版本,会被打上墓碑标记,在flush的时候删除
create 'user' ,{NAME=>'info',VERSIONS => '3'},{NAME=>'data',VERSIONS=>'2'}

put 插入数据

  • put只能插入一条数据。需要批量插入可以使用Java API循环插入
  • 插入数据需要制定,列族列名。形式为列族:列名
  • 列族+列名+rowkey可以确定唯一cell,列族+列名+rowkey+version可以确定cell中某一版本的值
# 像user表的info列族中插入信息,rowkey为rk0001,添加列:name,值为zhangsan
put 'user','rk0001','info:name','zhangsan'
# 向user表中插入信息,row key为rk0001,列族info中添加名为gender的列,值为female
HBase(main):012:0> put 'user', 'rk0001', 'info:gender', 'female'

# 向user表中插入信息,row key为rk0001,列族info中添加名为age的列,值为20
HBase(main):013:0> put 'user', 'rk0001', 'info:age', 20

# 向user表中插入信息,row key为rk0001,列族data中添加名为pic的列,值为picture
HBase(main):014:0> put 'user', 'rk0001', 'data:pic', 'picture'

查询数据操作

查看某些字段的语法固定,通过不同的组合,即可查询到指定条件的值,查询的中文字段显示的是十六进制。

get操作 hbase hbase shell get_数据_03

通过rowkey进行查询

get 'user' 'rk0001'

get操作 hbase hbase shell get_版本号_04

查看rowkey下某个列族的信息

get 'user', 'rk0001', 'info'

get操作 hbase hbase shell get_get操作 hbase_05

查看rowkey指定列族指定列的值

get 'user' ,'rk0001', 'info:name','info:age'
get 'user', 'rk0001', 'info:name', 'data:pic'

get操作 hbase hbase shell get_删除表_06

查看rowkey指定多个列族的值

# 两种写法效果一致,前者简洁,后者查询意义更直观
get 'user', 'rk0001', 'info', 'data'
get 'user', 'rk0001', {COLUMN => ['info', 'data']}

get操作 hbase hbase shell get_数据_07

指定rowkey与列值过滤器查询

  • FILTER 为固定字段,不能更改
  • ValueFilter和下面的QualifierFilter分别为列值过滤器和列名过滤器
    更多过滤器相关可以参考HBase过滤器
# 获取user表中row key为rk0001,cell的值为zhangsan的信息r
get 'user', 'rk0001', {FILTER => "ValueFilter(=, 'binary:zhangsan')"}

get操作 hbase hbase shell get_删除表_08

指定rowkey与列名模糊查询

# 获取user表中row key为rk0001,列标示符中含有a的信息
get 'user', 'rk0001', {FILTER => "QualifierFilter(=,'substring:a')"}

get操作 hbase hbase shell get_数据_09


范围查询使用scan关键字

查询某表所有行的数据

scan 'user'

get操作 hbase hbase shell get_get操作 hbase_10

列族查询

  • 此处 COLUMNS不可以省略
  • 某些列的值执行删除操作后,不会在物理上进行删除,而是打上墓碑标记
    • 想显示被打上墓碑标记的值,使用RAW =>true
    • RAW默认值是false,不想显示被打上墓碑标记的值,不写此字段即可
scan 'user', {COLUMNS => 'info'}
scan 'user', {COLUMNS => 'info', RAW => true, VERSIONS => 5}
scan 'user', {COLUMNS => 'info', RAW => true}
scan 'user', {COLUMNS => 'info'}

get操作 hbase hbase shell get_删除表_11

多列族查询

scan 'user', {COLUMNS => ['info', 'data']}

get操作 hbase hbase shell get_数据_12

指定列族与某个列名查询

# 查询user表中列族为info、列标示符为name的信息
scan 'user', {COLUMNS => 'info:name'}
# 查询info:name列、data:pic列的数据
scan 'user', {COLUMNS => ['info:name', 'data:pic']}
# 查询user表中列族为info、列标示符为name的信息,并且版本最新的5个
scan 'user', {COLUMNS => 'info:name', VERSIONS => 5}

get操作 hbase hbase shell get_删除表_13

指定多个列族与按照数据值模糊查询

scan 'user', {COLUMNS => ['info', 'data'], 
FILTER => "(QualifierFilter(=,'substring:a'))"}

get操作 hbase hbase shell get_数据_14

指定rowkey的范围查询

  • 指定rowkey的范围查询是左闭右开区
查询user表中列族为info,rk范围是[rk0001, rk0002)的数据
scan 'user', {COLUMNS => 'info', STARTROW => 'rk0001', ENDROW => 'rk0002'}

get操作 hbase hbase shell get_删除表_15

指定rowkey模糊查询

# 查询user表中row key以rk字符开头的数据
scan 'user',{FILTER=>"PrefixFilter('rk')"}

指定数据版本的范围查询

# 查询user表中指定范围的数据(前闭后开)
scan 'user', {TIMERANGE => [1392368783980, 1392380169184]}

更新数据库操作

更新数据值

  • 更新数据和插入数据操作一样,使用put。有数据执行更新,没数据执行插入
在这里插入代码片

更新版本号

alter 'user', NAME => 'info', VERSIONS => 5

删除数据以及删除表操作

删除的数据在上还存在,只是被打上墓碑标记。等待特定时机从物理上删除。

指定rowkey以及列名进行删除

# 实际上就是删除某个cell
delete 'user', 'rk0001', 'info:name'

指定rowkey,列名以及版本号进行删除

#实际上就是删除指定cell的某个版本的值
delete 'user', 'rk0001', 'info:name', 1392383705316

删除一个列族

alter 'user', NAME => 'info', METHOD => 'delete' 
# 或
alter 'user', 'delete' => 'info'

清空表数据

truncate 'user'

删除表

  • 删除表前,要先置表为disable状态
disable 'user'
  • 然后使用drop删除表
drop 'user'

统计一张表有多少行数据

count 'user'
HBase shell管理命令

显示服务器状态

status 'hbaseServerName'

get操作 hbase hbase shell get_删除表_16

显示当前用户

whoami

get操作 hbase hbase shell get_get操作 hbase_17

显示当前所有表

list

get操作 hbase hbase shell get_数据_18

查询指定表的记录数

count 'user'

显示表的结构信息

describe 'user'

get操作 hbase hbase shell get_数据_19

显示表是否存在

exists 'user'

get操作 hbase hbase shell get_版本号_20

显示表是否启用\禁用

is_enabled 'user'
is_disabled 'user'

get操作 hbase hbase shell get_版本号_21

启用、禁用表

enable 'user'
disable 'user'

删除表

  • 删除表前要先disable表
drop 'user'

清空表

truncate 'user'

更改表的列族

  • 为当前表增加列族
alter 'user',NAME => 'TESTCF',VERSIONS =>2
  • 删除当前表某个列族
alter 'user', 'delete' => 'CF2'

get操作 hbase hbase shell get_get操作 hbase_22