美文网首页大数据
一文讲清HBase存储结构

一文讲清HBase存储结构

作者: spacedong | 来源:发表于2019-01-06 17:53 被阅读1次
image

前言

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

HBase的存储结构

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

逻辑存储结构

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

HBase 逻辑视图

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

  • Row key :表的主键,按照字典序排序。
  • 列簇:在 HBase 中,列簇将表进行横向切割。
  • 列:属于某一个列簇,在 HBase 中可以进行动态的添加。
  • Cell : 是指具体的 Value
  • Version :在这张图里面没有显示出来,这个是指版本号,用时间戳(TimeStamp )来表示。

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

Key 和 Value 图

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

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

Region Server 和 Region 的关系
Region Server 和 Region 关系图
  • 一个 Region Server 就是一个机器节点(服务器)
  • 一个 Region Server 包含着多个 Region
  • 一个 Region 包含着多个列簇 (CF)
  • 一个 Region Server 中可以有多张 Table,一张 Table 可以有多个 Region

物理存储结构

先来看这张图:

Hbase架构图

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

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

在具体的物理结构中

  • HRegion Server 就是一个机器节点,包含多个 HRegion ,但是这些 HRegion 不一定是来自于同一个 Table ,负责响应的是用户的 IO 请求,和 HDFS 进行交互,是服务器中的一个进程。
  • HRegion 包含多个 HStore
  • 一个 CF 组成一个 HStore ,默认是 10 G,如果大于 10G 会进行分裂。HStoreHBase 的核心存储单元,一个 HStoreMemStoreStoreFile 组成。
  • MemStore 是一块内存,默认大小是 128M,如果超过了这个大小,那么就会进行刷盘,把内存里的数据刷进到 StoreFile 中。
  • HStore 对应着的是 Table 里面的 Column Family,不管有 CF 中有多少的数据,都会存储在 HStore 中,为了避免访问不同的 HStore 而导致的效率低下。
  • HRegionHbase 中分布式存储和负载均衡的最小单元,但不是存储的最小单元。
  • 一个 Hstore 可以有多个 StoreFile

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

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

查找Row 3的数据

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

HBase的架构

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

HBase的架构图
  • Client 是客户端,要求读写数据的发起者。
  • ZK 集群是负责转发 Client 的请求和提供心跳机制,会让 HRegion ServerHRegion 注册进来,同时保存着 RowkeyRegion 的映射关系。
  • HMaster 中可以有多个待命,只有一个在活跃。

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

相关文章

  • 一文讲清HBase存储结构

    前言 Hbase 是一个分布式的、多版本、面向列的开源 KV 数据库。运行在 HDFS 的基础上,支持 PB 级别...

  • HBase架构详解及读写流程

    目录一、HBase存储结构详解二、HBase写流程三、HBase读流程 Hbase是bigtable的开源山寨版本...

  • HBase-interview-questions

    一 HBase存储结构 HBase结构图示 二 rowkey设计原则 1️⃣ rowkey长度原则 : 建议越短越...

  • 经典Hbase面试7题(附答案)

    Hbase Hbase是怎么写数据的? HDFS和HBase各自使用场景 Hbase的存储结构 热点现象(数据倾斜...

  • HBase架构与原理

    HBASE基本概念 Hbase是构建在HDFS上的分布式列存储系统,用于海量结构化数据存储 为什么需要HBASE?...

  • HBase数据模型介绍

    HBase 介绍 HBase的数据的存储结构不同于传统的关系型数据库,HBase是一种结构松散,分布式,多维度有序...

  • Hbase原理与架构

    我们都知道Hbase是一个构建在HDFS上的分布式列存储系统。Hbase主要用于海量数据的结构化存储。 Hbase...

  • springboot集成Hbase

    HBase简介HBase是一个可以进行随机访问的存取和检索数据的存储平台,存储结构化和半结构化的数据。因此,一般的...

  • JanusGraph HBase存储结构

    目的 JanusGraph是目前使用率较高的开源图数据库。它的架构如下图: JanusGraph HBase存储 ...

  • Hbase面试题

    1.Hbase的特点 分布式面向列存储 主从结构 合适存储半结构化数据或者非结构化数据 Null不会存储,没有数据...

网友评论

    本文标题:一文讲清HBase存储结构

    本文链接:https://www.haomeiwen.com/subject/ignsrqtx.html