分布式数据库原理与应用-3 HBase


第三章 Hbase

01 Hbase数据模型

逻辑模型

image-20230417215406265

HBase相关概念

1
2
3
4
5
6
(1)表(table):HBase采用表来组织数据;
(2)行(row):每个表都由行组成,每个行由行键(row key)来标识,行键可以是任意字符串;
(3)列族(column family):一个table有许多个列族,列族是列的集合,属于表结构,也是表的基本访问控制单元;
(4)列标识(column qualifier):属于某一个Column Family:Column Qualifier形式标识,每条记录可动态添加
(5)时间戳(timestamp):时间戳用来区分数据的不同版本;
(6)单元格(cell):在table中,cell中存储的数据没有数据类型,是字节数组byte[] ,通过<RowKey,Column Family: Column Qualifier,Timestamp>元组来访问单元格

物理模型

1
2
3
4
关系型数据库特点:
表结构预先定义;
每列的数据类型不同;
空值占用存储空间
1
2
3
4
HBase特点:
只需定义表名和列族,可以动态添加列族和列;
数据都是字符串类型;
空值不占用存储空间;

image-20230417220304381

image-20230417221413176

实际存储方式

image-20230417221843341

image-20230417222012709

image-20230417222052208

02 Hbase数据定义

HBase Shell

1
HBase Shell:HBase的命令行工具,最简单的接口,适合HBase管理使用;
1
2
3
4
5
6
7
8
[root@localhost bin]# hbase shell
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 1.2.6, rUnknown, Mon May 29 02:25:32 CDT 2017

hbase(main):001:0>

命令:help,status,version,exit,quit

数据定义

image-20230417223050379

创建表

1
2
3
4
5
6
7
语法:creat‘表名’,‘列族名’
描述:
● 必须指定表名和列族;
● 可以创建多个列族;
● 可以对标和列族指明一些参数;
● 参数大小写敏感;
● 字符串参数需要包含在单引号中;

image-20230417223313646

表相关操作

exsit
1
exsit:查看某个表是否存在

image-20230417223907126

List
1
List:查看当前所有的表名

image-20230417223934111

describe
1
describe:查看选定表的列族及其参数

image-20230417223645853

Alter
1
2
3
4
5
6
7
Alter:修改表结构
功能:
修改表中列族的参数信息;
增加列族;
移除或删除已有的列族;

注意:删除列族时,表中至少有两个列族组成;

image-20230417224143643

drop
1
2
drop:删除表
注意:删除表之前需要先禁用表。

image-20230417224227529

truncate
1
truncate:删除表中所有数据,想到于对表完成禁用、删除,按原结构重新建立表结构的过程

image-20230417224251643

03 Hbase数据操作

image-20230417225437539

1
在HBase中对数据的增删改查命令如表所示,由put命令向表中添加和修改数据,get和scan命令用来查询数据,delete删除列族或列的数据。接下来详细介绍这几个命令的具体用法。

put

为单元格插入数据

1
2
3
4
语法:put  ‘表名’,‘行键’,‘列族:列限定符’,‘单元格值’,时间戳
描述:必须指定表名、行键、列族、列限定符。
参数区分大小,字符串使用单引号。
只能插入单条数据。

image-20230417225550657

1
2
3
4
在HBase中,更新数据时,不管是添加新的数据还是修改数据都使用put命令,它的语法结构如ppt所示,put命令所带的第一个参数为表名,指定某一张表,第二参数为行键的名称,用来指定某一行,第三个参数是为列族和列的名称,中间用冒号隔开,列族名必须是已经创建的,否则HBase会报错;列名是临时定义的,所以列族里的列是可以随意扩展的。第四个参数为单元格的值,在HBase里,所有数据都是字符串的形式。最后一个参数为时间戳,如果不设置时间戳,系统会自动插入当前时间为时间戳。
HBase中所有命令参数是区分大小写的,字符串是需要包含在单引号中的,这一点在介绍后面操作命令不再提示。
从命令形式来看,put只能插入单元格的数据,如果需要将逻辑表中的一行数据插入到HBase中需要执行几条put命令。
比如,需要将此逻辑表的第一行数据(左边图和红色虚线框)插入HBase中,需要执行5条命令(右图)

更新单元格数据

1
2
3
描述:
如果指定的单元格已经存在,则put为更新数据;
单元格会保存指定version=>n的多个版本数据。

image-20230417230227658

1
2
3
4
5
另外如果由‘表名’,‘行键’,‘列族:列限定符’指定的单元格已经存在表中,则执行put命令为数据更新操作,

比如,在执行了左边的5条命令后(左图),再执行这条命令(鼠标指向“put ‘Student’, ‘0001’, ‘StuInfo:Name’,‘Tom Green‘,1),学号为1的学生姓名将改成了tom green。

默认情况下数据更新后,旧版本的数据将不可见,但如果建表时对列族指定了Version属性值,则旧版数据依然存在,用户查询时可以获得最新的多个版本;

delete

1
2
3
4
5
6
7
8
语法:delete  ‘表名’,‘行键’,‘列族<:列限定符>’,<时间戳>
描述:必须指定表名、行键和列族,列限定符和时间戳是可选参数;
Delete最小删除粒度为单元格,且不能跨列族删除。

(1)delete ‘Student’, ‘0001’, ‘Grades’
(2)delete ‘Student’, ‘0001’, ‘Grades:Math’
(3)delete ‘Student’, ‘0001’, ‘Grades:Math’,2
(4)Deleteall ‘Student’, ‘0001’
1
2
3
4
5
6
HBase中删除数据采用delete命令,其语法与put命令类似,必须指定表名,行键,和列族。而列限定符和时间戳是可选的
下面通过举例说明delete的使用,如第一条命令,只指定了表名行键和列族,表示删除student表中,学号为0001的学生所有的成绩信息。即将表中第一行grades列族的信息全部删除。
第二条命令,指定了列族和列限定符,表示只删除这个学生的数学成绩。
第三条命令,指定了列族和列限定符的同时,还指定了时间戳,表示所有时间戳小于等于2的数据都会被删掉。注意这里不是只删除时间戳等于2的数据。

从上面语法和命令来看,delete最小的删除粒度为单元格,而且不能跨列族删除,如果想删除表中所有列族在某个行键上的数据,也就是说想删除一个逻辑行,可以使用deleteall命令,例如第四条命令,则删除0001学号学生的所有信息,包括stuinfo列族中的基本信息和grades列族中的所有成绩信息。
1
delete操作并不会马上删除数据,只是将对应的数据打上删除标记(tombstone),只有在数据产生合并时,数据才会被删除。

数据查询

get

1
2
3
get:根据行键获取一条数据
scan:扫描一个表,可以指定行键范围,或使用过滤器
语法:get ‘表名’,‘行键’,<‘列族:列限定符’,时间戳>

image-20230417231312108

1
2
第三条命令指定了列族和时间戳范围,
第四条命令则指定列族和显示的版本数,其结果如图所示(蓝色图),在执行此命令之前先向表的stuinfo列族的name列插入了三个版本的数据,注意这里前提是stuinfo列族在创建时已指定VERSION参数可以保存最近的3个版本的数据。在向同一单元格put三条数据后,再执行第四条命令,显示的结果可以看到,只将最近两个更新的数据显示出来了(红色虚线框)

image-20230417231510110

scan

1
语法:scan  ‘表名’,{< ‘列族:列限定符’,时间戳>}

image-20230417232102333

1
2
3
4
另外一种数据查询方式使用scan命令进行全表扫描,scan命令必须带的参数是表名,其他参数都可选,还可以指定输出行键范围,以及使用过滤器来对全表数据进行过滤显示。
依然通过举例说明scan命令的方法。
第一条命令指定表名查询全表数据;如图所示将表中所有行和所有列族信息都显示出来了。
第二条命令指定列族名称,显示student表中stuinfo列族的所有数据,注意与get不同的是,get只获得某一行的,而scan获取所有行的stuinfo列族数据。

image-20230417232442038

1
2
3
第五条命令指定输出行的范围;显示结果输出起始行和结束行但不包括结束行的数据,如图的命令只显示了001行的数据,并没有显示003行。

另外这些限定条件可以组合使用,中间使用逗号隔开,如第六条命令所示:查询起始行为001,结束行为002的所有行的stuinfo列族的数据信息。

本文标题:分布式数据库原理与应用-3 HBase

文章作者:TTYONG

发布时间:2023年04月17日 - 16:04

最后更新:2023年06月22日 - 15:06

原始链接:http://tianyong.fun/%E5%88%86%E5%B8%83%E5%BC%8F%E6%95%B0%E6%8D%AE%E5%BA%93%E5%8E%9F%E7%90%86%E4%B8%8E%E5%BA%94%E7%94%A8-3%20HBase.html

许可协议: 转载请保留原文链接及作者。

多少都是爱
0%