一文讲清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)
相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库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
目录
相关文章
|
存储 NoSQL 分布式数据库
Hbase+ES和MongoDB存储大数据的选用
Hbase+ES和MongoDB存储大数据的选用
430 0
|
2月前
|
存储 监控 分布式数据库
百亿级存储架构: ElasticSearch+HBase 海量存储架构与实现
本文介绍了百亿级数据存储架构的设计与实现,重点探讨了ElasticSearch和HBase的结合使用。通过ElasticSearch实现快速检索,HBase实现海量数据存储,解决了大规模数据的高效存储与查询问题。文章详细讲解了数据统一接入、元数据管理、数据一致性及平台监控等关键模块的设计思路和技术细节,帮助读者理解和掌握构建高性能数据存储系统的方法。
百亿级存储架构: ElasticSearch+HBase 海量存储架构与实现
|
5月前
|
存储 NoSQL 大数据
大数据存储:HBase与Cassandra的对比
【7月更文挑战第16天】HBase和Cassandra作为两种流行的分布式NoSQL数据库,在数据模型、一致性模型、数据分布、查询语言和性能等方面各有千秋。HBase适用于需要强一致性和与Hadoop生态系统集成的场景,如大规模数据处理和分析。而Cassandra则更适合需要高可用性和灵活查询能力的场景,如分布式计算、云计算和大数据应用等。在实际应用中,选择哪种数据库取决于具体的需求和场景。希望本文的对比分析能够帮助读者更好地理解这两种数据库,并做出明智的选择。
|
5月前
|
存储 Java 分布式数据库
使用Spring Boot和HBase实现大数据存储
使用Spring Boot和HBase实现大数据存储
|
5月前
|
存储 Java 分布式数据库
HBase构建图片视频数据的统一存储检索
HBase构建图片视频数据的统一存储检索
|
6月前
|
存储 大数据 分布式数据库
使用Apache HBase进行大数据存储:技术解析与实践
【6月更文挑战第7天】Apache HBase,一个基于HDFS的列式存储NoSQL数据库,提供高可靠、高性能的大数据存储。其特点是列式存储、可扩展至PB级数据、低延迟读写及多版本控制。适用场景包括大规模数据存储、实时分析、日志存储和推荐系统。实践包括集群环境搭建、数据模型设计、导入、查询及性能优化。HBase在大数据存储领域扮演关键角色,未来有望在更多领域发挥作用。
|
6月前
|
存储 分布式计算 Hadoop
HBase基础结构
HBase基础结构
|
7月前
|
存储 NoSQL 分布式数据库
分布式NoSQL列存储数据库Hbase(一)Hbase的功能与应用场景、基本设计思想
分布式NoSQL列存储数据库Hbase(一)Hbase的功能与应用场景、基本设计思想
468 0
|
7月前
|
NoSQL 分布式数据库 数据库
分布式NoSQL列存储数据库Hbase_列族的设计(五)
分布式NoSQL列存储数据库Hbase_列族的设计(五)
270 0
|
7月前
|
存储 NoSQL 分布式数据库
分布式NoSQL列存储数据库Hbase Java API(四)
分布式NoSQL列存储数据库Hbase Java API(四)
74 0