一文讲清HBase的存储结构

简介: 讲清Hbase的存储结构。
![image](http://image.spacedong.top/Swan%20River.jpg) ### 前言 `Hbase` 是一个分布式的、多版本、面向列的开源 `KV` 数据库。运行在 `HDFS` 的基础上,支持 `PB` 级别、百万列的数据存储。 ### HBase的存储结构 #### 逻辑存储结构 通过下图直观地展示 `HBase` 的逻辑存储结构: ![HBase 逻辑视图](http://image.spacedong.top/Hbase%20%E9%80%BB%E8%BE%91%E8%A7%86%E5%9B%BEjpg%20%281%29.jpg) 在本图中,列簇(`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 和 Value 图](http://image.spacedong.top/Hbase%20Key%E7%BB%84%E6%88%90.jpg) `KEY` 的组成是以 `Row key` 、`CF(Column Family)` 、`Column` 和 `TimeStamp` 组成的。 `TimeStamp` 在 `HBase` 中充当的作用就是版本号,因为在 `HBase` 中有着数据多版本的特性,所以同一个 `KEY` 可以有多个版本的 `Value` 值(可以通过配置来设置多少个版本)。查询的话是默认取回最新版本的那条数据,但是也可以进行查询多个版本号的数据,在接下来的进阶操作文章中会有演示。 ##### Region Server 和 Region 的关系 ![Region Server 和 Region 关系图](http://image.spacedong.top/Region%20Server%20%E5%92%8C%20Region%20%E7%9A%84%E5%85%B3%E7%B3%BB.jpg) - 一个 `Region Server` 就是一个机器节点(服务器) - 一个 `Region Server` 包含着多个 `Region` - 一个 `Region` 包含着多个列簇 `(CF)` - 一个 `Region Server` 中可以有多张 `Table`,一张 `Table` 可以有多个 `Region` #### 物理存储结构 先来看这张图: ![Hbase架构图](http://image.spacedong.top/Hbase%E7%89%A9%E7%90%86%E5%AD%98%E5%82%A8%E6%9E%B6%E6%9E%84.png) 为了不混淆,我们可以先把以下的概念一一对应起来 逻辑结构 | 物理结构 ---|--- Region Server | HRegion Server Region | HRegion CF | HStore(这里指的是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` 主键的数据,结果集如下: ![查找Row 3的数据](http://image.spacedong.top/%E9%80%BB%E8%BE%91%E5%92%8C%E7%89%A9%E7%90%86%E6%98%A0%E5%B0%84.png) 更加直观地显示,在 `HBase` 中是以 `CF` 为单元的存储结构。 ### HBase的架构 如下图,`HBase` 的架构图,在 `HBase` 中我们看到有 `Client`、`Zookeeper`、`HMaster` 和 `HRegion`。 ![HBase的架构图](http://image.spacedong.top/Hbase%E6%9E%B6%E6%9E%84%E5%9B%BEpng.png) - `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 写入数据的过程 ![在HBase中写入数据的过程](http://image.spacedong.top/Hbase%E8%AF%BB%E5%8F%96%E6%95%B0%E6%8D%AE.png) 先是 `Client` 进行发起数据的插入请求,如果 `Client` 本身存储了关于 `Rowkey` 和 `Region` 的映射关系的话,那么就会先查找到具体的对应关系,如果没有的话,就会在`ZK`中进行查找到对应 `Region server`,然后再转发到具体的 `Region` 上。所有的数据在写入的时候先是记录在 `WAL` 中,同时检查关于 `MemStore` 是否满了,如果是满了,那么就会进行刷盘,输出到一个 `Hfile` 中,如果没有满的话,那么就是先写进 `Memstore` 中,然后再刷到 `WAL` 中。 #### 福利 看完后,是否对 HBase 的存储结构有所了解了呢?最后送两本电子书给大家,一本是《HBase权威指南(中文版)高清完整版》,一本是《HBase实战中文版》,在公众号后台回复 HBase 关键字即可获取。 PS:画图的过程是真滴累啊!!! 题图:chichimaru ![image](http://image.spacedong.top/wechatqcode.jpg)
相关实践学习
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
4月前
|
存储 算法 分布式数据库
HBase原理 | HBase内部探险
HBase原理 | HBase内部探险
76 0
|
11月前
|
存储 分布式计算 NoSQL
HBase的数据结构原理与使用
关键词:HBase Hadoop 大数据 大数据存储 数据开发 数据库
800 0
HBase的数据结构原理与使用
|
存储 缓存 NoSQL
风炉煮茶系列(1)-聊聊HBase
这一切的一切,还要从谷歌的那篇论文说起。。。。 06年google对外发布了三大论文之一Bigtable: A Distributed Storage System for Structured Data(原文地址:链接)。从此以后,浩如烟海的各种所谓大数据存储类的产品或完全复用,或者部分借鉴,或者在此基础上微创新,基本上都能看到BigTable里面的设计影子。 这里面有开源的HBase,公司内部使用的Lindorm,商业化的OTS,包括最近大火的ClickHorse基本上都或多或少的有类似的设计。 而Hbase完全是基于BigTable开源的实现。
195 0
|
Java 测试技术 分布式数据库
从数据结构比较HBase的3种memstore实现方案
HBase的memstore目前存在3种实现:DefaultMemstore、CompactingMemstore、CCSMapMemStore,本文尝试从数据结构的角度对其进行比较。
1546 0
|
存储 算法 NoSQL
「从零单排HBase 09」HBase的那些数据结构和算法
「从零单排HBase 09」HBase的那些数据结构和算法
157 0
「从零单排HBase 09」HBase的那些数据结构和算法
|
存储 分布式数据库 数据库
HBase 数据结构 | 学习笔记
快速学习 HBase 数据结构。
127 0
|
存储 缓存 分布式数据库
|
存储 算法 分布式数据库
HBase内部结构
之前有一篇文章已经大概的说了一下HBase的基本的概念和内部的一些构成的意思,比如表啊,列族啊之类的,这一篇再简单的说一下HBase的架构数据模型从大到小 namespace表空间:类似RDBMS中的库概念,当你想把一组表去统一的管理的时候可以使用得到,这种抽象为即将推出的多租户相关功能奠定了基础 配额管理:限制命名空间可以使用的资源量(即区域,表)。
1733 0
|
存储 分布式数据库 数据库
|
存储 分布式数据库 数据库