大数据技术HBase之指令操作实战

举报
tea_year 发表于 2024/06/24 09:00:29 2024/06/24
【摘要】          本节我们将向您展示如何使用 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】,每个命令之后不需要分号(;)结束。

  1. 客户端进出命令

# 进入客户端:
        ./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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。