HBase的物理模型和读写流程(二)

本文介绍了HBase的物理模型及读写流程。Region作为HBase中的分布式存储和负载均衡最小单元,由一个或多个Store组成。写操作流程包括数据写入MemStore直至达到阈值,然后Flush为StoreFile;读操作流程则需先查找.Zookeeper.以定位数据所在的HRegionServer。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. HBase的物理模型

Region是按大小进行分割的,每个表开始只有一个Region。随着数据量的增多,Region不断增大,当增大到液体个阈值的时候,Region就会分出一个新的Region,之后会有越来越多的Region。
在这里插入图片描述

Region是HBase中分布式存储和负载均衡的最小单元,不同的Region分布到不同的RegionServer上,如下所示:
在这里插入图片描述
Region虽然是分布式存储的最小单元,但并不是存储的最小单元。Region是由一个或多个Store组成的,每个Store由一个MemStore和多个StoreFile组成,数据写入时首先进入到MemStor中并存储在内存中,MemStore中的数据是排序的,当MemStore累计到一定阈值时,就会创建一个新的MemStore,并且将老的MemStore添加到Flush队列,由单独的线程Flush到磁盘上,成为一个StoreFile。当一个Store中的StoreFile达到一定的阈值后,就会进行一次合并操作,将对同一个key的值修改合并到一起,形成一个大的StoreFile。当StoreFile的大小达到一定的阈值后,又会对StoreFile进行切分操作,等分为两个StroeFile。
在这里插入图片描述

2. HBase的读写流程

正如HDFS和MapReduce由客户端、数据节点和主节点组成一样,HBase也是采用相同的主从结构模型,他由一个Master节点协调管理一个或多个RegionServer节点。
HBase主节点负责启动整个HBase集群,通过“心跳机制”得到RegionServer节点工作状态,并管理Region数据的分发。当一个RegionServer节点发生故障或宕机后,Master节点中中的HMaster进程将把该节点标记为故障,并协调其他负载较轻的RegionServer节点,将故障RegionServer节点中的数据复制到自己的节点中,以保证数据的完整性。
RegionServer节点主要负责响应客户端的读写请求和数据的存储,定期地通过“心跳机制”向HMaster节点反馈自己的健康状态和数据位置。
在这里插入图片描述

2.1 写操作流程

  1. Client通过Zookeeper的调度,向HRegionServer发出写数据请求,在HRegion中写数据。
  2. 数据被写入HRegion的MemStore,直到MemStore达到预设的阈值。
  3. MemStore中的数据被Flush成一个StoreFile
  4. 随着StoreFile文件的不断增多,当其数量增长到一定阈值后,触发Compact合并操作,将多个StoreFile合并成一个StoreFile,同时进行版本合并和数据删除。
  5. StoreFile通过不断的Compact合并操作,逐步形成越来越大的StoreFile。
  6. 单个StoreFile大小超过一定的阈值后,触发Split操作,把当前的HRegion Split成两个新的HRegion。父HRegion会下线,新的Split出的两个HRegion会被HMaster分配到相应的HRegionServer上,使得原先一个HRegion的压力得以分流到两个HRegion上。

2.2 读操作流程

  1. Client访问Zookeeper,查找-ROOT-表,获取.META.表信息。
  2. 从.META.表查找,获取存放目标数据的HRegion信息,从而找到对应的HRegionServer。
  3. 通过HRegionServer获取需要查找的数据。
  4. HRegionServer的内存分为MemStore和BlockCache两部分,MemStore主要用于写数据,BlockCache主要用于读数据。读请求将先到MemStore中查数据,如果无法查询到就会转到BlockCache,再查询不到就会到StoreFile,并把读的结果放入BlockCache。
### Hive、Hadoop HBase 的关系及功能对比 #### 一、Hadoop 的核心功能 Hadoop 是一个开源框架,主要用于处理大数据的分布式存储计算。其核心组件包括 HDFS(分布式文件系统) MapReduce(分布式计算框架)。HDFS 负责将数据分布在集群中的多个节点上,而 MapReduce 则负责执行复杂的并行计算任务[^1]。 #### 、Hive 的特点及其与 Hadoop 的联系 Hive 是一种基于 Hadoop 的数据分析工具,它允许用户通过类 SQL 查询语言(称为 HiveQL)来查询存储在 HDFS 上的数据。Hive 将用户的查询转换为一系列 MapReduce 作业,在后台运行这些作业以完成复杂的数据分析工作。因此,Hive 高度依赖于 Hadoop 提供的基础设施来进行大规模数据处理[^2]。 - **数据模型**: Hive 使用类似于传统关系型数据库的表结构,适合处理结构化或半结构化的批量数据。 - **适用场景**: 主要用于离线批处理任务,例如日志分析、ETL 流程以及报表生成等。 #### 三、HBase 的特性及其与其他两者的差异 HBase 是一个分布式的 NoSQL 数据库,设计目标是为了满足实时随机读写的高性能需求。作为 Hadoop 生态的一部分,HBase 构建在 HDFS 基础之上,能够高效地管理检索海量非结构化或半结构化数据[^3]。 - **数据模型**: 它采用了列族存储的方式,非常适合用来保存稀疏矩阵形式的数据集合。 - **访问模式**: 支持低延迟单记录级别的存取操作,这使得它可以很好地服务于在线事务处理 (OLTP) 类应用场景。 - **技术实现细节**: 存储单元是以 HFiles 形式存在硬盘上的物理文件,并由 Zookeeper 协调服务保障一致性等问题[^4]。 #### 四、总结比较 | 特性/产品 | Hadoop | Hive | HBase | |------------|---------------|---------------|---------------| | **主要用途** | 分布式存储&计算平台 | 大规模数据仓库解决方案 | 实时读写NoSQL数据库 | | **擅长领域** | 批量处理, ETL流程优化 | 结构化数据分析 | 非结构化/半结构化数据管理 | | **接口风格** | 编程式API(Java为主) | SQL-like(HiveQL) | Key-value & Columnar API | ```python # 示例代码展示如何连接到 Hive 并执行简单查询 from pyhive import hive conn = hive.Connection(host='localhost', port=10000, username='your_username') cursor = conn.cursor() cursor.execute('SELECT * FROM your_table LIMIT 10;') for result in cursor.fetchall(): print(result) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值