大数据技术HBase之指令操作实战
【摘要】 本节我们将向您展示如何使用 hbase shell CLI 在 HBase 中创建表、在表中插入行、对表执行放置和扫描操作、启用或禁用表以及启动和停止 HBase。主要讲述了HBase的CRUD等基本DDL和DML操作。注意:HBase Shell 中的删除键没用,要用【Ctrl+Backspace】,每个命令之后不需要分号(;)结束。客户端进出命令# 进入客户端: ...
本节我们将向您展示如何使用 hbase shell CLI 在 HBase 中创建表、在表中插入行、对表执行放置和扫描操作、启用或禁用表以及启动和停止 HBase。
主要讲述了HBase的CRUD等基本DDL和DML操作。
注意:HBase Shell 中的删除键没用,要用【Ctrl+Backspace】,每个命令之后不需要分号(;)结束。
-
客户端进出命令
# 进入客户端:
./hbase shell
# 退出客户端命令:
quit
# 帮助
help
2.namespace操作 默认存在一个default的namespace
#1. 查看namespace,相当于 文件夹
list_namespace
#2. 创建namespace
create_namespace "命名空间名字"
#3. 删除namespace
drop_namespace "命令空间名字"
3.具体的表操作
# 1. 查看所有表
hbase(main):024:0> list
TABLE
testns:t_person # namespace:表
t_user # default:表 default被省略了
2 row(s) in 0.1140 seconds
# 2. 查看某个namespace下的所有表
hbase(main):027:0> list_namespace_tables "testns"
TABLE
t_person
1 row(s) in 0.3970 seconds
# 3. 创建表
语法:create "namespace:表名","列族1","列族2"
hbase(main):023:0> create "testns:t_person","info","edu"
0 row(s) in 9.9000 seconds
# 4. 查看表结构
hbase(main):030:0> desc "testns:t_person"
Table testns:t_person is ENABLED
testns:t_person
COLUMN FAMILIES DESCRIPTION
{NAME => 'edu', 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_SCOPE => '0'}
{NAME => 'info', 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_SCOPE => '0'}
2 row(s) in 1.6400 seconds
# 5. 删除表和禁用表
hbase(main):002:0> disable "namespace:表"
0 row(s) in 4.4790 seconds
#6.删除之前,需要先禁用表
hbase(main):002:0> drop "namespace:表"
0 row(s) in 4.4790 seconds
4.数据的CRUD操作
# 1. 添加数据(每次只能添加一个列)
put "namespace:表","rowkey","列族1:列名1","值"
hbase(main):007:0> put 'testns:t_person','1001','info:name','zhangsan'
0 row(s) in 1.7250 seconds
hbase(main):008:0> put 'testns:t_person','1001','info:age',20
0 row(s) in 0.0210 seconds
hbase(main):009:0> put 'testns:t_person','1002','info:name','lisi'
0 row(s) in 0.0190 seconds
hbase(main):010:0> put 'testns:t_person','1002','info:age',21
0 row(s) in 0.0620 seconds
# 2. 根据rowkey查找数据,select * from 表名 where id='值'
get "namespace:表名","rowkey"
hbase(main):015:0> get 'testns:t_person','1001'
COLUMN CELL
info:age timestamp=1598752891747, value=20
info:name timestamp=1598752881461, value=zhangsan
2 row(s) in 0.1550 seconds
# 3. 根据rowkey和列族查找数据
# select * from 表名,where id='rowkey值' and '列名=列'
get "namespace:表名","rowkey","列族:列"
# 4. scan 查询表中所有数据,相当于我们的select *
hbase(main):019:0> scan "testns:t_person"
hbase(main):024:0> scan 'testns:t_person'
ROW COLUMN+CELL
1001 column=info:age, timestamp=1598753486814, value=20
1001 column=info:name, timestamp=1598753478658, value=zhangsan
1002 column=info:age, timestamp=1598753520306, value=21
1002 column=info:name, timestamp=1598753509800, value=lisi
2 row(s) in 0.0410 seconds
# 5. scan 查询表中前2条数据 =>,只能是大写的LIMIT,不能是小写的limit
#select * from 表名 limit 值
hbase(main):022:0> scan "testns:t_person",{LIMIT=>2}
注意是=>号
# 6. 使用start row 和 end row 范围查找
# rowkey 在半闭半开的区间[STARTROW,STOPROW)
hbase(main):029:0> scan "testns:t_person",{STARTROW=>"1001",STOPROW=>"1003"}
hbase(main):032:0> scan 'testns:t_person',{STARTROW=>'1001',STOPROW=>'1003'}
ROW COLUMN+CELL
1001 column=info:age, timestamp=1598753486814, value=20
1001 column=info:name, timestamp=1598753478658, value=zhangsan
1002 column=info:age, timestamp=1598753520306, value=21
1002 column=info:name, timestamp=1598753509800, value=lisi
问题:HBase中的数据是按照Rowkey的ASCII字典顺序进行全局排序的
假如有5个Rowkey:"012", "0", "123", "234", "3",按ASCII字典排序后的结果为:"0", "012", "123", "234", "3"。
Rowkey排序时会先比对两个Rowkey的第一个字节,如果相同,然后会比对第二个字节,依次类推... 对比到第X个字节时,已经超出了其中一个Rowkey的长度,短的Rowkey排在前面。
# 7. 使用start row和limit查找
hbase(main):032:0> scan "testns:t_person",{STARTROW=>"1002",LIMIT=>2}
hbase(main):033:0> scan 'testns:t_person',{STARTROW=>'1002',LIMIT=>2}
ROW COLUMN+CELL
1002 column=info:age, timestamp=1598753520306, value=21
1002 column=info:name, timestamp=1598753509800, value=lisi
1003 column=info:name, timestamp=1598753628840, value=wangwu
# 8. 修改数据
put "namespace:表","rowkey","列族:列名","值"
put 'testns:t_person','1001','info:name','zhangsanfeng'
# 9. 删除数据(删除某个cell)
delete "namespace:表","rowkey","列族:列名"
# 10. 删除某个rowkey对应的数据
deleteall "namespace:表","rowkey"
delete 'testns:t_person','1005','info:name'
deleteall 'testns:t_person','1007'
# 11. 统计表中所有数据
count "namespace:表"
# 12. 清空表中的所有数据
# 和mysql的truncate类似。
truncate "namespace:表"
5.多版本操作问题
# 1. 创建表
hbase(main):013:0> create "testns:user","info"
# 2. 修改版本数
hbase(main):016:0> alter "testns:user",{NAME=>'info',VERSIONS=>2}
# 表的列族的VERSIONS=>2表示的该列族的数据,要保存2个版本。如果put3次,则保留最新的2个版本。
# 3. 同一个cell添加2次数据。
hbase(main):014:0> put "testns:user","10001","info:name","aaa"
0 row(s) in 0.2620 seconds
hbase(main):015:0> put "testns:user","10001","info:name","bbb"
0 row(s) in 0.0290 seconds
# 4. 查看多版本
hbase(main):017:0> get "testns:user","10001",{COLUMN=>'info:name',VERSIONS=>3}
COLUMN CELL
info:name timestamp=1586795010367, value=bbb
info:name timestamp=1586795004085, value=aaa
说明:
1. 可以查看VERSIONS指定的版本数量的值。
2. cell中多个版本的值,按照时间戳降序排序。
3. 在get或者scan查询数据,并不指定VERSIONS,默认读取的cell中最新的1个的版本的值。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)