hbase自我小结

HBase 是一个分布式的、多版本、面向列的开源 KV 数据库。运行在 HDFS 的基础上,支持 PB 级别、百万列的数据存储。作为性能如此强大的 KV 数据库,HBase的存储结构究竟是怎样的呢?面向列的存储结构究竟有什么样的不同之处呢?接下来会详细讲解这部分

HBase的存储结构

为了清晰地表述这个,我们把HBase的存储结构分为逻辑结构物理结构两个部分。逻辑存储结构通过下图直观地展示 HBase 的逻辑存储结构:

在这里插入图片描述

在本图中,列簇(Column Family)对应的值就是 info 和 area ,列( Column 或者称为 Qualifier )对应的就是 name 、 age 、 country 和 city ,Row key 对应的就是 Row 1 和 Row 2,Cell 对应的就是具体的值。

Row key :表的主键,按照字典序排序。

列簇:在 HBase 中,列簇将表进行横向切割。

列:属于某一个列簇,在 HBase 中可以进行动态的添加。

Cell : 是指具体的 Value 。

Version :在这张图里面没有显示出来,这个是指版本号,用时间戳(TimeStamp )来表示。

看完这张图,是不是有点疑惑,怎么获取其中的一条数据呢?既然 HBase 是 KV 的数据库,那么当然是以获取 KEY 的形式来获取到 Value 啦。在 HBase 中的 KEY 组成是这样的:
在这里插入图片描述

KEY 的组成是以 Row key 、CF(Column Family) 、Column 和 TimeStamp 组成的。

TimeStamp 在 HBase 中充当的作用就是版本号,因为在 HBase 中有着数据多版本的特性,所以同一个 KEY 可以有多个版本的 Value 值(可以通过配置来设置多少个版本)。查询的话是默认取回最新版本的那条数据,但是也可以进行查询多个版本号的数据,在接下来的进阶操作文章中会有演示。

Region Server 和 Region 的关系

一个 Region Server 就是一个机器节点(服务器)

一个 Region Server 包含着多个 Region

一个 Region 包含着多个列簇 (CF)

一个 Region Server 中可以有多张 Table,一张 Table 可以有多个 Region

在这里插入图片描述

物理存储结构

在这里插入图片描述

为了不混淆,我们可以先把以下的概念一一对应起来

逻辑结构物理结构Region ServerHRegion ServerRegionHRegionCFHStore(这里指的是Store)

在具体的物理结构

中HRegion Server 就是一个机器节点,包含多个 HRegion ,但是这些 HRegion 不一定是来自于同一个 Table ,负责响应的是用户的 IO 请求,和 HDFS 进行交互,是服务器中的一个进程。

HRegion 包含多个 HStore 。

一个 CF 组成一个 HStore ,默认是 10 G,如果大于 10G 会进行分裂。HStore 是 HBase 的核心存储单元,一个 HStore 由 MemStore 和 StoreFile 组成。

MemStore 是一块内存,默认大小是 128M,如果超过了这个大小,那么就会进行刷盘,把内存里的数据刷进到 StoreFile 中。

在 HStore 对应着的是 Table 里面的 Column Family,不管有 CF 中有多少的数据,都会存储在 HStore 中,为了避免访问不同的 HStore 而导致的效率低下。

HRegion 是 Hbase 中分布式存储和负载均衡的最小单元,但不是存储的最小单元。

一个 Hstore 可以有多个 StoreFile

在HBase中查找不同的CF的数据

从不同的 CF 中查询 Row 3 主键的数据

更加直观地显示,在 HBase 中是以 CF 为单元的存储结构。
HBase的架构

Client 是客户端,要求读写数据的发起者。ZK 集群是负责转发 Client 的请求和提供心跳机制,会让 HRegion Server 和 HRegion 注册进来,同时保存着 Rowkey 和 Region 的映射关系。HMaster 中可以有多个待命,只有一个在活跃。Hbase读取数据的过程Client 请求读取数据时,先转发到 ZK 集群,在 ZK 集群中寻找到相对应的 Region Server,再找到对应的 Region,先是查 MemStore,如果在 MemStore 中获取到数据,那么就会直接返回,否则就是再由 Region 找到对应的 Store File,从而查到具体的数据。在整个架构中,HMaster 和 HRegion Server 可以是同一个节点上,可以有多个 HMaster 存在,但是只有一个 HMaster 在活跃。在 Client 端会进行 rowkey-> HRegion 映射关系的缓存,降低下次寻址的压力。HBase 写入数据的过程
先是 Client 进行发起数据的插入请求,如果 Client 本身存储了关于 Rowkey 和 Region 的映射关系的话,那么就会先查找到具体的对应关系,如果没有的话,就会在ZK中进行查找到对应 Region server,然后再转发到具体的 Region 上。所有的数据在写入的时候先是记录在 WAL 中,同时检查关于 MemStore 是否满了,如果是满了,那么就会进行刷盘,输出到一个 Hfile 中,如果没有满的话,那么就是先写进 Memstore 中,然后再刷到 WAL 中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值