Hbase常用命令操作

Hbase中基本的Shell命令操作

关于Hbase的使用,如果部署的是分布式的Hbase,使用的是Hadoop的zookeeper,那么应该先启动zookeeper然后再启动Hbase,在master上执行 start-hbase.sh 即可,如果有出现问题,到hbase下的logs目录中查看对应的 .log 日志文件看看问题出在哪。

进入和退出hbase shell 

hbase shell

>exit

 

查看hbase有哪些命令

>help

查看某个命令的具体使用

>help 'put'  # 查看put命令的使用方法

上面help显示的 general组 中的命令

# hbase集群状态
hbase(main):004:0> status
1 active master, 0 backup masters, 4 servers, 0 dead, 1.0000 average load
Took 0.1896 seconds                                                                                         

# 查看hbase版本
hbase(main):005:0> version
2.1.3, rda5ec9e4c06c537213883cca8f3cc9a7c19daf67, Mon Feb 11 15:45:33 CST 2019
Took 0.0003 seconds                                                                                         

# 当前登录用户
hbase(main):006:0> whoami
root (auth:SIMPLE)
    groups: root
Took 0.1448 seconds        

# 查看对表操作的基本命令                                                                                 
hbase(main):007:0> table_help
Help for table-reference commands.

You can either create a table via 'create' and then manipulate the table via commands like 'put', 'get', etc.
See the standard help information for how to use each of these commands.

However, as of 0.96, you can also get a reference to a table, on which you can invoke commands.
For instance, you can get create a table and keep around a reference to it via:

   hbase> t = create 't', 'cf'
.....more

查看hbase中的表

>list

查看表的属性

describe 'table'
hbase(main):053:0> describe 'user'
Table user is ENABLED                                                                                                                                                     
user                                                                                                                                                                      
COLUMN FAMILIES DESCRIPTION                                                                                                                                               
{NAME => 'city', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_B
LOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CAC
HE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '65536'}                                     
{NAME => 'info', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_B
LOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CAC
HE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '65536'}                                     
2 row(s)
Took 0.0304 seconds                                                                                                                                                       
hbase(main):054:0> 
# 其中的属性的意义:
NAME:列族名
VERSIONS:最大版本号
MIN_VERSIONS:最小版本号
TTL(Time To Live):存活时间
IN_MEMORY:是否开启缓存,默认false,应该开启,否则与BLOCKCACHE冲突
BLOCKCACHE:读缓存是否开启,默认开启,64M

中间VERSIONS是对数据的保存版本数,VERSIONS为1,也就是说,默认情况只会存取一个版本的列数据,当再次插入的时候,后面的值会覆盖前面的值(旧数据其实还存在),如果设置为3,插入三条,行键和列族,列限定符一样,值不一样的值,指定获取三个版本的数据时 例如: get 'user', '0001', {COLUMNS => 'name:firstname', VERSIONS => 3} 

会将 user表中,行键0001和name:firstname 的最新的三个版本的值获取

创建表和删除表

# create '表名', '列族名', '列族名'
create 'test', 'col_test','col_test1'
# 上面创建表和下面这个一样
create 'test',{NAME=>'col_test'},{NAME='col_test1'}

# 删除表,首先得禁用表,然后再删除
disable 'test'
drop 'test'

alter命令修改表

# 增加列族, '表名', '需要添加的列族名'
alter 'table_name', 'add_family'
# 或者
alter 'table_name', {NAME => 'add_family'}

# 删除列族 
alter 'table_name', {NAME=>'delete_family', METHOD=>'delete'}
# 第二种删除列族的方法
alter 'table_name', 'delete'=>'delete_family'

# 添加某列族时,同时删除某列族
alter 'table_name', {NAME=>'add_family'}, {NAME='delete_family', METHOD=>'delete'}

 如下图所示,执行是成功的。

查看表是否存在

exists 'table_name'

禁用和启用表

# 禁用表
disable 'table'
# 查看表是否禁用
is_disable 'table'

# 启用表
enable 'table'
# 查看表是否启用
is_enable 'table'

往表中插入数据

# put '表名','rowkey','列族名:列名','值'
put 'user','0001','name:firstname', 'Jed'

# 可以指定时间戳,否则默认为系统当前时间戳
put 'user','0002','info:age',20,1553138000

这里,如果我再插入一条 put 'user','0001','name:firstname', 'Jed1'  数据,那么我们通过get查询 行键0001 列族name,列限定符的firstname的值是 jed1 ,原来的那个值 jed 也会存在,这两个值的时间戳不一样,我们查询显示的是最新的数据, HBase会保存旧的值,不存在覆盖

查询数据

get 'user', '0001'
#  查询某行,指定列名
get 'person', '0001', 'name:firstname'

# 查询某行,添加其他限制条件
# 查询user表中,rowkey为'0001'的这一行,只显示name:firstname这一列,并且只显示最新的3个版本
get 'user', '0001', {COLUMNS => 'name:firstname', VERSIONS => 3}

# 查看指定列的内容,并限定显示最新的3个版本和时间范围 
get 'user', '0001', {COLUMN => 'name:first', VERSIONS => 3, TIMERANGE => [1392368783980, 1392380169184]}

# 查询user表中,rowkey为'rk0001',且某列的内容为'TXT'的记录
scan 'user', 'rk0001', {FILTER => "ValueFilter(=, 'binary:TXT')"}

scan命令 

# 扫描全表
scan 'person'

# 扫描时指定列族
scan 'user', {COLUMNS => 'info'}

# 扫描时指定列族,并限定显示最新的5个版本的内容
scan 'user', {COLUMNS => 'name', VERSIONS => 5}

# 设置开启Raw模式,开启Raw模式会把那些已添加删除标记但是未实际删除的数据也显示出来
scan 'person', {COLUMNS => 'name', RAW => true}

# 列的过滤
# 查询user表中列族为info和data的信息
scan 'user', {COLUMNS => ['info', 'data']}

# 查询user表中列族为info,列名为name、列族为data,列名为pic的信息
scan 'user', {COLUMNS => ['info:name', 'data:pic']}

# 查询user表中列族为info,列名为name的信息,并且版本最新的5个
scan 'user', {COLUMNS => 'info:name', VERSIONS => 5}

# 查询user表中列族为info和data且列名含有a字符的信息
scan 'user', {COLUMNS => ['info', 'data'], FILTER => "QualifierFilter(=,'substring:a'))"}

# 查询user表中列族为info,rk范围是[rk0001, rk0003)的数据
scan 'people', {COLUMNS => 'info', STARTROW => 'rk0001', ENDROW => 'rk0003'}

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

# 查询user表中指定时间戳范围的数据
scan 'user', {TIMERANGE => [1553138933, 1553138935]}

删除数据

delete 'table_name', 'rowkey', 'family:column'

清空表

truncate 'table_name'

。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值