HbaseShell

HbaseShell

hbase按照时间戳降序排列各时间版本,其他映射建按照升序排序。

时间版本(version)--------单元值有时间版本,时间版本用时间戳标识,是一个long。没有指定时间版本时,当前时间戳作为操作的基本。hbase保留单元值时间版本的数量基于列族进行配置。默认数量是3个。

##基本使用命令
启动Hbase: hbase shell

退出: exit
shutdown表示关闭hbase服务,必须重新启动hbase才可以恢复,exit只是退出hbase shell,退出之后完全可以重新进入

查看某命令:help 'create'

查看集群状态: status

查看版本: version

查看登录用户信息: whoami

查看对某张表进行操作的基本命令: table_help

数据库与表

查看数据库中有哪些表: list

查勘表属性describe 'person'

# 其中的属性的意义:
NAME:列族名
VERSIONS:最大版本号
MIN_VERSIONS:最小版本号
TTL(Time To Live):存活时间
IN_MEMORY:是否开启缓存,默认false,应该开启,否则与BLOCKCACHE冲突
BLOCKCACHE:读缓存是否开启,默认开启,64M

建表
定义表的时候只需要指定column family的名字,列名在put(插入数据)的时候动态指定

# create '表名', '列族1', '列族2'...
create 'person', 'name', 'age'

# 建表时可以指定表属性信息
#create 'person',{NAME=>'name' },{NAME=>'age'}
create 'user_info',{NAME=>'base_info',VERSIONS=>3 },{NAME=>'extra_info',IN_MEMORY=>'true'} 

修改表

--(1)增加列族
alter 'table_name', 'add_family'
# 或者
alter 'table_name', {NAME => 'add_family'}
# 当然,新增加的列可以设置属性,比如
alter 'table_name', {NAME => 'add_family', VERSIONS => 3}

--(2) 删除列族
alter 'table_name', {NAME => 'delete_family', METHOD => 'delete'}
或者
alter 'table_name', 'delete' => 'delete_family'

--(3) 添加列族f1同时删除列族f2
alter 'user', {NAME => 'f1'}, {NAME => 'f2', METHOD => 'delete'}

--(4) 修改列族
# 将user表的f1列族版本号改为5
alter 'user', NAME => 'f1', VERSIONS => 5

判断表是否存在
exists 'table_name'

禁用表与启用表:

--(1) 禁用表
disable 'table_name'
--(2) 查看表是否禁用
is_disabled 'table_name'
--(3) 启用表
enable 'table_name'
--(4) 查看表是否启用
is enabled 'table_name'

删除表:

# hbase的某些版本,在删除表前,需要先禁用表
disable 'table_name'
drop 'table_name'

清空表:
清空表所有数据
truncate 'table_name'

删除所有CF3的数据
eleteall 't1','r7'

表数据处理命令

增(插入数据)

--(1) 
# put '表名','rowkey','列族名:列名','值'
put 'person','0001','name:firstname', 'Jed'
--(2) 可以指定时间戳,否则默认为系统当前时间
#语法:put <table>,<rowkey>,<family:column>,<value>,<timestamp>
put 'person','0002','info:age',20,1482077777778

删(删除数据)

删除列
delete 'table_name', 'rowkey', 'family:column'

删除行

# 语法:deleteall <table>, <rowkey>,  <family:column> , <timestamp>,可以不指定列名,删除整行数据
# 例如:删除表t1,rowk001的数据
hbase(main)> deleteall 't1','rowkey001'

查(查询数据)

查询某行
--(1) 
get 'person', '0001'
--(2) 查询某行,指定列名
get 'person', '0001', 'name:firstname'

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

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

# 查询person表中,rowkey为'rk0001',且某列的内容为'中国'的记录
scan'person', 'rk0001', {FILTER => "ValueFilter(=, 'binary:中国')"}
全表扫描
--(1) 扫描全表
scan 'person',{LIMIT=>5}

--(2) 扫描时指定列族
scan 'person', {COLUMNS => 'name'}

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

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


--(5) 列的过滤
# 查询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 => [1392368783980, 1392380169184]}

#查询user表中rowkey前缀包含row2,且列名包含xyz,时间过滤
scan 'user', {ROWPREFIXFILTER => 'row2', FILTER => "(QualifierFilter (>=, 'binary:xyz')) AND (TimestampsFilter ( 123, 456))"}


#查询user表中列列值为 sku88 的信息
scan 'user', FILTER=>"ValueFilter(=,'binary:sku188')"

#查询user表中列列值包含 88 的信息
scan 'user', FILTER=>"ValueFilter(=,'substring:88')"

scan 'test1', FILTER=>"ColumnPrefixFilter('c2') AND ValueFilter(=,'substring:88')"

scan 'test1', FILTER=>"ColumnPrefixFilter('s') AND ( ValueFilter(=,'substring:123') OR ValueFilter(=,'substring:222') )"

#rowkey为user1开头的
scan 'test1', FILTER => "PrefixFilter ('user1')"

## FirstKeyOnlyFilter: 一个rowkey可以有多个version,同一个rowkey的同一个column也会有多个的值, 只拿出key中的第一个column的第一个version
## KeyOnlyFilter: 只要key,不要value
scan 'test1', FILTER=>"FirstKeyOnlyFilter() AND ValueFilter(=,'binary:sku188') AND KeyOnlyFilter()"

#从user1|ts2开始,找到所有的rowkey以user1开头的
scan 'test1', {STARTROW=>'user1|ts2', FILTER => "PrefixFilter ('user1')"}

#从user1|ts2开始,找到所有的到rowkey以user2开头
scan 'test1', {STARTROW=>'user1|ts2', STOPROW=>'user2'}


#查询rowkey里面包含ts3的
import org.apache.hadoop.hbase.filter.CompareFilter
import org.apache.hadoop.hbase.filter.SubstringComparator
import org.apache.hadoop.hbase.filter.RowFilter
scan 'test1', {FILTER => RowFilter.new(CompareFilter::CompareOp.valueOf('EQUAL'), SubstringComparator.new('ts3'))}


#b1开头的列中并且值为sku1的
scan 'test1', FILTER=>"ColumnPrefixFilter('b1') AND ValueFilter(=,'binary:sku1')"



# SingleColumnValueFilter的使用,b1开头的列中并且值为sku1的
import org.apache.hadoop.hbase.filter.CompareFilter
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter
import org.apache.hadoop.hbase.filter.SubstringComparator
scan 'test1', {COLUMNS => 'sf:b1', FILTER => SingleColumnValueFilter.new(Bytes.toBytes('sf'), Bytes.toBytes('b1'), CompareFilter::CompareOp.valueOf('EQUAL'), Bytes.toBytes('sku1'))}

权限管理

1)分配权限
# 语法 : grant <user> <permissions> <table> <column family> <column qualifier> 参数后面用逗号分隔

# 权限用五个字母表示: "RWXCA".

# READ('R'), WRITE('W'), EXEC('X'), CREATE('C'), ADMIN('A')
# 例如,给用户‘test'分配对表t1有读写的权限,
hbase(main)> grant 'test','RW','t1'

2)查看权限
# 语法:user_permission <table>
# 例如,查看表t1的权限列表
hbase(main)> user_permission 't1'

3)收回权限
# 与分配权限类似,语法:revoke <user> <table> <column family> <column qualifier>
# 例如,收回test用户在表t1上的权限
hbase(main)> revoke 'test','t1'

其他

--(1) 查看命名空间
list_namespace

default # 用户创建的表放在这里
hbase # 系统表空间

--(2) 把表中数据强制写到磁盘
#每次flush都会建一个新的hfile
flush 'table_name'

参考
HBase Shell常用Shell命令
HBase基础之常用过滤器hbase shell操作

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

召唤师的峡谷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值