这是我参与「第四届青训营」笔记创作活动的第五天
HBase
HBase 是一个开源的非关系型分布式数据库,属于 Apache 软件基金会的 Hadoop 项目,运行在 HDFS 上,采用存算分离架构,在 CAP 理论中属于 CP 系统
主要组件
- HMaster:元数据管理,集群调度、保活
- RegionServer:提供数据读写服务
- ThriftServer:提供 Thrift API 读写的代理层
依赖组件
- ZooKeeper:分布式一致性公式协作管理,如 HMaster 选主、任务分发、元数据变更管理等
- HDFS:分布式文件系统,HBase 数据存储底座
HMaster 主要职责
- 管理 RS 实例生命周期,保证服务可用性
- 协调 RS 数据故障恢复,保证数据正确性
- 集中管理集群元数据,执行负载均衡等维护集群稳定性
- 定期巡检元数据,调整数据分布,清理废弃数据等
- 处理用户主动发起的元数据操作如键表
RegionServer 主要职责
- 提供部分 rowkey 区间数据的读写服务
- 如果负责 meta 表,向客户端 SDK 提供 rowkey 位置信息
- 认领 HMaster 发布的故障恢复服务,帮助加速数据恢复
- 处理 HMaster 下达的元数据操作,如 region 打开/关闭/分裂/合并操作
RegionServer 主要组件
- MemStore:基于 SkipList 数据结构实现的内存态存储,定期批量写入硬盘
- Write-Ahead-Log:顺序记录写请求到持久化存储,用于故障恢复内存中丢失的数据
- StoreFile:即 HFile,表示 HBase 在 HDFS 存储数据的文件格式,其内数据按 rowkey 字典序有序排列
- BlockCache:HBase 以数据块为单位读取数据并缓存在内存中加速重复数据的读取
Zookeeper 主要职责
- HMaster 登记信息,对 active/backup 分工达成共识
- RegionServer 登记信息,失联时 HMaster 保活处理
- 等级 meta 表位置信息,供 SDK 查询读写位置信息
- 供 HMaster 和 RegionServer 协作处理分布式任务
ThriftServer 主要职责
- 实现 HBase 定义的 Thrift API,作为代理层向用户提供RPC 读写服务
- 用户可根据IDL 自行生成客户端实现
- 独立于 RegionServer 水平扩展 ,用户可访问任意 ThriftServer 实例( scan 操作较特殊,需要同实例维护 scan 状态