大数据

一文讲清HBase存储结构

2019-01-06  本文已影响1人  spacedong
image

前言

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

HBase的存储结构

为了清晰地表述这个,我们把HBase的存储结构分为逻辑结构物理结构两个部分来描述。

逻辑存储结构

通过下图直观地展示 HBase 的逻辑存储结构:

HBase 逻辑视图

在本图中,列簇(Column Family)对应的值就是 infoarea ,列( Column 或者称为 Qualifier )对应的就是 nameagecountrycityRow key 对应的就是 Row 1Row 2Cell 对应的就是具体的值。

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

Key 和 Value 图

KEY 的组成是以 Row keyCF(Column Family)ColumnTimeStamp 组成的。

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

Region Server 和 Region 的关系
Region Server 和 Region 关系图

物理存储结构

先来看这张图:

Hbase架构图

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

逻辑结构 物理结构
Region Server HRegion Server
Region HRegion
CF HStore(这里指的是Store)

在具体的物理结构中

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

从不同的 CF 中查询 Row 3 主键的数据,结果集如下:

查找Row 3的数据

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

HBase的架构

如下图,HBase 的架构图,在 HBase 中我们看到有 ClientZookeeperHMasterHRegion

HBase的架构图

Hbase读取数据的过程

Client 请求读取数据时,先转发到 ZK 集群,在 ZK 集群中寻找到相对应的 Region Server,再找到对应的 Region,先是查 MemStore,如果在 MemStore 中获取到数据,那么就会直接返回,否则就是再由 Region 找到对应的 Store File,从而查到具体的数据。

在整个架构中,HMasterHRegion Server 可以是同一个节点上,可以有多个 HMaster 存在,但是只有一个 HMaster 在活跃。

Client 端会进行 rowkey-> HRegion 映射关系的缓存,降低下次寻址的压力。

HBase 写入数据的过程

在HBase中写入数据的过程

先是 Client 进行发起数据的插入请求,如果 Client 本身存储了关于 RowkeyRegion 的映射关系的话,那么就会先查找到具体的对应关系,如果没有的话,就会在ZK中进行查找到对应 Region server,然后再转发到具体的 Region 上。所有的数据在写入的时候先是记录在 WAL 中,同时检查关于 MemStore 是否满了,如果是满了,那么就会进行刷盘,输出到一个 Hfile 中,如果没有满的话,那么就是先写进 Memstore 中,然后再刷到 WAL 中。

福利

看完后,是否对 HBase 的存储结构有所了解了呢?最后送两本电子书给大家,一本是《HBase权威指南(中文版)高清完整版》,一本是《HBase实战中文版》,在公众号后台回复 HBase 关键字即可获取。

PS:画图的过程是真滴累啊!!!

题图:chichimaru

公众号:spacedong
上一篇下一篇

猜你喜欢

热点阅读