李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
Hbase存储结构
Leefs
2021-02-12 PM
2328℃
0条
# 03.Hbase存储结构 ### 一、HBase逻辑结构 先从一个逻辑结构模型图开始看起: ![03.Hbase存储结构01.png](https://lilinchao.com/usr/uploads/2021/02/687599816.png) + **Table(表):**一个表由一个或者多个列族构成。。数据的属性。比如:name、age、TTL(超时时间)等等都在列族里边定义。定义完列族的表是个空表,只有添加了数据行以后,表才有数据。 + **Column Family(列族):**在HBase里,可以将多个列组合成一个列族。建表的时候不用创建列,因为列是可增减变化的,非常灵活。唯一需要确定的就是列族,也就是说一个表有几个列族是一开始就定好的。此外表的很多属性,比如数据过期时间、数据块缓存以及是否使用压缩等都是定义在列族上的,而不是定义在表上或者列上。这一点与以往的关系型数据库有很大的差别。列族存在的意义是:HBase会把相同列族的列尽量放在同一台机器上,所以说想把某几个列放在一台服务器上,只需要给他们定义相同的列族。 + **Row(行):**一个行包含多个列,这些列通过列族来分类。行中的数据所属的列族从该表所定义的列族中选取,不能选择这个表中不存在的列族。由于HBase是一个面向列存储的数据库,所以一个行中的数据可以分布在不同的服务器上。 + **RowKey(行键):**rowkey和MySQL数据库的主键比起来简单很多,rowkey必须要有,如果用户不指定的话,会有默认的。rowkey完全是由用户指定的一串不重复的字符串,另外,rowkey按照字典序排序。**一个rowkey对应的是一行数据** + **Region:**Region就是一段数据的集合。之前提到过高表的概念,把高表进行水平切分,假设分成两部分,那么这就形成了两个Region。 注意一下Region的几个特性: - Region不能跨服务器,一个RegionServer可以有多个Region。 - 数据量小的时候,一个Region可以存储所有的数据;但是当数据量大的时候,HBase会拆分Region。 - 当HBase在进行负载均衡的时候,也有可能从一台RegionServer上把Region移动到另一服务器的RegionServer上。 - Region是基于HDFS的,它的所有数据存取操作都是调用HDFS客户端完成的。 + **RegionServer:**RegionServer就是存放Region的容器,直观上说就是服务器上的一个服务,负责管理维护Region。 ### 二、物理存储结构 以上是一个基本的逻辑结构,底层的物理存储结构才是重中之重的内容,看下图,并且将尝试换个角度解释上边的几个概念: ![03.Hbase存储结构02.png](https://lilinchao.com/usr/uploads/2021/02/4204212149.png) 具体来说: + **NameSpace:**命名空间,类似于关系型数据库的 DatabBase 概念,每个命名空间下有多个表。HBase有两个自带的命名空间,分别是 hbase 和 default,hbase 中存放的是 HBase 内置的表,default 表是用户默认使用的命名空间。 + **Row:**HBase 表中的每行数据都由一个 **RowKey** 和多个 **Column**(列)组成,数据是按照 RowKey 的字典顺序存储的,并且查询数据时只能根据 RowKey 进行检索,所以 RowKey 的设计十分重要。 + **Column:**列,HBase 中的每个列都由 **Column Family(列族)**和 **Column Qualifier(列限定符)**进行限 定,例如 info:name,info:age。建表时,只需指明列族,而列限定符无需预先定义。 + **TimeStamp:**时间戳,时间戳,用于标识数据的不同版本(version),每条数据写入时,如果不指定时间戳,系统会自动为其加上该字段,其值为写入 HBase 的时间。 + **Cell:**单元格,由{rowkey, column Family:column Qualifier, time Stamp} 唯一确定的单元。cell 中的数据是没有类型的,全部是字节码形式存贮。 ### 三、HBase与关系型数据库的对比 传统关系型数据库的表结构图如下: ![03.Hbase存储结构03.png](https://lilinchao.com/usr/uploads/2021/02/1078954217.png) 其中每行都是不可分割的,也正是体现了数据库第一范式的原子性,也就是说三个列必须在一起,而且要被存储在同一台服务器上,甚至是同一个文件里面。 HBase的表架构如图所示: ![03.Hbase存储结构04.png](https://lilinchao.com/usr/uploads/2021/02/1340375609.png) HBase的每一个行都是离散的,因为列族的存在,所以一个行里不同的列甚至被分配到了不同的服务器上。行的概念被减弱到了一个抽象的存在。在实体上,把多个列定义为一个行的关键词rowkey,也就是行这个概念在HBase中的唯一体现。 HBase的存储语句中必须精确的写出要将数据存放到哪个单元格,单元格由表:列族:行:列来唯一确定。需要写清楚数据要被存储在哪个表的哪个列族的哪个行的哪个列。如果一行有10列,那么存储一行的数据就需要写明10行的语句。 *附:* [参考文章链接](https://www.cnblogs.com/simon-1024/archive/2004/01/13/12161970.html)
标签:
Hbase
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/1115.html
上一篇
Hbase架构
下一篇
CentOS7 Hadoop安装教程
取消回复
评论啦~
提交评论
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
43
标签云
Golang基础
锁
数学
哈希表
JavaScript
MySQL
MyBatis
Git
JavaWeb
Ubuntu
Spark SQL
SpringBoot
查找
Linux
nginx
容器深入研究
正则表达式
Spark Streaming
字符串
Kibana
排序
JVM
Sentinel
Kafka
稀疏数组
RSA加解密
Java阻塞队列
Java编程思想
递归
链表
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞