HBase表结构和shell操作(二)

本文详细介绍了HBase的表结构,包括行键、列族、时间戳等核心概念,并通过实例展示了如何创建表、插入数据及查询数据。此外,还讨论了HBase与Hive的区别及硬件需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HBase表结构
Hbase最基本的单位是列(column)。一列或多列形成一行(row),并由唯一的行键(row key)来确定存储。反过来说,一个表(table)中有若干行,其中每列可能有多个版本,在每一个单元格(cell)中存储了不同的值
Hbase表结构:建表时,不需要限定表中的字段,只需要指定若干个列族。
    插入数据时,列族中可以存储任意多个列(以kv对的形式存储, 列名-列值)
    一个value可以有多个版本,通过版本号来区分(时间戳)
    要查询某一个具体字段的值,需要指定的坐标:表名-->行键-->列族(ColumnFamily):列名(Qualifier)-
Table-表(大表)
Rowkey-行键(主键)
    行键是字节数组,任何字符串都可以作为行键
    表中的行键进行排序,数据按照Rowkey的字节(byte order) 排序存储
    所有的对表的访问都要通过行键(单个Rowkey访问,或Rowkey范围访问,全表扫描0
Column family(列族)
    列族必须定义表时给出,但已可以动态添加列族
    每个列族可以有一个或多个列成员(Column Qualigier),列成员不需要在定义表时给出,新的列族成员可以随后按需动态加入
    数据按列族分开存储,HBase所谓的列式存储就是根据列族分开存储(每个列族对应一个Store)
TimeStamp(时间戳)
    每个Cell可能有多个版本,他们之间用时间戳区分。
Cell(单元格)
    Cell由行键,列族:限定符,时间戳唯一决定。
    Cell中的数据是没有类型的,全部以字节码形式存储
    每个单元格保存着同一份数据的多个版本
    不同时间版本的数据按照时间顺序倒序排序
Region(区域)
    HBase自动把表水平(按row)划分成多个区域(region),每个region会保存一个表里面某段连续的数据
    HRegion是HBase中分布式存储和负载均衡的最小单元,最小单元表示不同的HRegion可以分布在不同的HRegionServer上。但一个HRegion不会拆分到多个server上。
因为hbase与hive的区别
hbase查询快
硬件需求高于hadoop集群 硬盘 内存 CPU 
模式设计
    数据库的模式设计不是一个新概念,只要成为数据库的系统都存在模式设计问题。
    HBase的模式结构包括表、Rowkey,列族,timestamp
    模式是一个三维有序结构,表,Rowkey,列族三个维度确定一行数据
Rowkey(行键设计)
    Rowkey是不可分割的字节数,按字典排序由低到高存储在表中。
RowKey唯一原则
Rowkey尽量散列
RowKey长度原则
Column Family 列族定义
    列族,是一些列的集合
        一个列族的所有成员都有着相同的前缀。
        在物理上,列族的成员在文件系统上都存储在一起。
        多个列族在执行flush和compaction时,造成很多IO负载
        Flush和compaction操作是针对一个Region的,当一个列族操作大量数据时会引发一个flush

        那些不相关的列族也要进行flush,会造成很多没用的I/O浮躁。

shell操作实例

进入hbase命令行  
./hbase shell

显示hbase中的表  list
list
创建user表,包含info、data两个列族
create 'user', {NAME => 'info', VERSIONS => '3'}
查看表结构 describe
describe 'user'
put 向表中添加数据
向表中插入数据 put 
向user表中插入信息,row key为rk0001,列族info中添加name列标示符,值为zhangsan
put 'user', 'rk0001', 'info:name', 'zhangsan'

向user表中插入信息,row key为rk0001,列族info中添加gender列标示符,值为female
put 'user', 'rk0001', 'info:gender', 'female'

向user表中插入信息,row key为rk0001,列族info中添加age列标示符,值为20
put 'user', 'rk0001', 'info:age', 20
查看字段版本 get
put 'user','rk0001','info:name','zhangsan2'
put 'user','rk0001','info:name','zhangsan3'
get 'user','rk0001',{COLUMN=>'info',VERSIONS=>3}
get 获取指定行的数据 得指定行
查看指定列族的消息
get 'user','rk0001','info'

查看指定列族 指定字段的消息
get 'user','rk0001','info:age'
查看一段时间里的记录 通过时间戳范围查找
get 'user','rk0001',{COLUMN=>'info',VERSIONS=>3,TIMERANGE=>[1477654000000],[1477654111111]}
查看指定行中 字段名称中含有 a的字段
返回字段的value值是指定的值的字段
scan 扫描表 不用指定行
查询表中的所有消息
查询列族为info,查询指定的rowkey范围
查询表中一 rk 开头的行
查询user表中指定范围的数据

scan 'user', {TIMERANGE => [1392368783980, 139238016918]}

delete 删除指定对象的值(可以为表,行,列,对应的值,另外也可以指定时间戳的值)
删除指定字段的值

通过时间戳删除指定的版本

alter
向表中添加列族


删除列族  


还可以是alter 'user',{NAME=>'data',METHOD=>'delete'}
truncate 
清空表中数据
truncate ‘user'

drop disable删除表
删除表之前必须先禁用


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值