hbase快速入门

简介

组成结构

hbase数据库主要由:表,行键,列族,列族限定符,时间戳,值组成。

表:与关系型数据库作用相同,当表随着记录数不断增加而变大后,会逐渐分裂成多份splits,成为regions,一个region由开始行键和结束行键表示,不同的region会被HMaster分配给相应的HRegionServer进行管理。

行键(Rowkey):是表的主键,可以使任意字符组合,表会按照行键的字节码排序,对表的访问都要通过行键。

列族(ColumnFamily):行键下的元素,列族可以有1-n个,一个列族中可以有1-n个列。列族可以动态扩展。列族以字节码进行存储。

列限定符(column qualifier):用来定位某一列。

时间戳(timestamp):值的版本标记。

值(value):由行键,列族,列限定符,时间戳决定谋一个值。也是以字节码存储。

适用场景

HBase适合存储结构化和半结构化的大规模数据,特别是对于需要快速随机读写和具有高吞吐量的数据存储和访问需求的场景。

  1. 时序数据:HBase适合存储需要按时间顺序进行存储和检索的数据,比如日志数据、传感器数据、监控数据等。
  2. 实时数据:对于需要实时处理和分析的数据,比如实时事件流数据、交易数据等,HBase能够提供快速的读写访问能力。
  3. 多维度数据:HBase适合存储具有多维度结构的数据,比如具有复杂的行列关系、需要多维度查询和分析的数据。
  4. 大规模数据:HBase适合存储大规模数据集,包括千万到数十亿行的数据,能够提供高性能的数据访问和处理能力。
  5. 半结构化数据:HBase能够存储半结构化的数据,比如JSON、XML等格式的数据,以及具有不固定列数的数据。

总的来说,HBase适合存储需要快速随机读写、具有大规模和多维度特征的数据,特别是对于需要实时访问和分析的大数据场景,HBase是一个非常合适的选择。

列族与列

HBase中的列族(Column Family)和列(Column)是数据存储的基本单元。

列族是表中的一组列的集合,这些列通常具有相似的特征并且经常一起使用。列族是在创建表时定义的,列族是HBase中的一个重要概念,它有助于组织和管理表中的数据。

列是表中的实际数据存储单元,它们位于列族中。每个列都有一个唯一的列限定符(Column Qualifier),用于标识该列在列族中的位置。列限定符通常由列族和列名组成,它们一起唯一标识了表中的每个单元格。

通过列族和列的组织结构,HBase能够高效地存储和管理大量的结构化数据。列族和列的设计对于表的性能和数据访问具有重要的影响,合理地划分列族和设计列的结构可以提高数据的存储效率和访问性能。

常用命令

1. 进入hbase

hbase shell # 进入shell
exit        # 退出
whoami      # 查看组
version     # 查看当前版本
status      # 查看状态
help 'scan' # 帮助命令

2. 命名空间

# 查看命名空间
list_namespace
# 创建命名空间
create_namespace 'my_ns'
# 删除命名空间,删除前,要先把表空间内的表全部删除
drop_namespace 'my_ns'
# 创建命名空间my_ns,且有user表,并且有info和infos俩列族,不指定表空间默认到default表空间了
create 'my_ns:user','info','infos'
# 修改命名空间配置
alter_namespace 'my_ns', {METHOD => 'set', 'PROPERTY_NAME' => 'PROPERTY_VALUE'}
# 查看命名空间下的表
list_namespace_tables 'my_ns'
# 查看所有命名空间及表
list

3. 表&列族

# 查看表详情
describe 'my_ns:user'
desc 'my_ns:user'
# 新增列族
alter 'my_ns:user','teacherInfo'
alter 'my_ns:user', NAME => 'info', VERSIONS => 5  # 新增列族,且设置5个版本
# 新增cf1、cf2列族,并指定cf2列族的版本数为3。
alter 'my_ns:user', 'cf1', {NAME => 'cf2', VERSIONS => 3}
# 设置列簇记录三个版本
alter 'my_ns:user',{NAME=>'info',VERSIONS=>3}
# 删除列族
alter 'my_ns:user', 'delete' => 'infos'
alter 'my_ns:user','teacherInfo',{NAME=>'teacherInfo',METHOD=>'delete'}
# 禁用表
disable 'my_ns:user'
# 启用表
enable 'my_ns:user'
# 测试表是否存在
exists 'my_ns:user'
# 删除表,删除前,必须先disable
drop 'my_ns:user'

4. 数据写入

#插入数据  row1为指定行键
put 'my_ns:user', 'row1', 'info:name', 'xiaoming'
put 'my_ns:user', 'row2', 'info:age', '18'
put 'my_ns:user', 'row3', 'info:sex', 'man'

5. 数据查询

#根据rowKey查询某个记录
get 'my_ns:user', 'row1'
get 'my_ns:user', 'row2', {COLUMN => 'info:age'}
get 'my_ns:user', 'row3', 'info'
get 'my_ns:user', 'row3', 'info:sex'

# 查询所有记录
# 还可以添加TIMERANGE和FITLER等高级功能
# STARTROW,ENDROW必须大写,否则报错;查询结果不包含等于ENDROW的结果集
scan 'my_ns:user'
scan 'my_ns:user', {VERSIONS=>5} # 多版本查询,全部列出,自己根据时间排序
scan 'my_ns:user', {LIMIT => 2}
scan 'my_ns:user', {STARTROW => 'row2'}   # 扫描前2条
scan 'my_ns:user', {STARTROW => 'row2', ENDROW => 'row2'} # 范围查询
scan 'my_ns:user', {STARTROW => 'row2', ENDROW => 'row3'} # 本结果和上条结果是一样的

# 正则查询 rowkey为“ca719fded975cb0dc579316281bae346#LXX1209085234027000251120141780705622720200727085922000000042863_101_1010001.eml”
get 'my_ns:user','ca719fded975cb0dc579316281bae346#LXX1209085234027000251120141780705622720200727085922000000042863_101_1010001.eml'
scan 'my_ns:user',{LIMIT=>1,FILTER=>"PrefixFilter('76241385831')",STARTROW=>'8000804002000045302033A',ENDROW=>'8000804002000045302033A'}
scan 'my_ns:user',{LIMIT=>1,FILTER=>"PrefixFilter('610051114691031334')"}
scan 'my_ns:user',{LIMIT=>1,FILTER=>"RowFilter(=,'regexstring:.*eml')"}

# 统计表记录数
语法:count <table>, {INTERVAL => intervalNum, CACHE => cacheNum}
INTERVAL设置多少行显示一次及对应的rowkey,默认1000;CACHE每次去取的缓存区大小,默认是10,调整该参数可提高查询速度
count 'my_ns:user'

6. 数据删除

# 删除指定列族和列的数据行
delete 'my_ns:user', 'row1', 'info:name'
# 删除所有列族的指定数据行
deleteall 'my_ns:user', 'row1'
# 删除表中所有数据
truncate 'my_ns:user'

7. 快照

快照有单独的表空间,不能再指定表空间

# 做快照之前先禁用表
disable 'my_ns:user'
snapshot 'my_ns:user','user_snapshot'
# 做完快照查看快照
list_snapshots
# 将快照还原成表
clone_snapshot 'user_snapshot','my_ns:user_1'
# 删除快照
delete_snapshot 'user_snapshot'
# 删除原表
drop 'my_ns:user'
  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值