深入浅出 HBase | 青训营笔记

50 阅读3分钟

深入浅出 HBase | 青训营笔记

这是我参与「第四届青训营 」笔记创作活动的的第12天

HBase 核心数据模型

  • HBase 是存储计算分离架构,以 HDFS 作为分布式存储底座。数据实际存储在 HDFS。
  • HBase 依赖 Zookeeper 实现元数据管理和服务发现。Client 通过 Zookeeper 配置连接到 HBase集群
  • Log-Structured Merge Tree 了解 LSM tree 的基本结构和特性。
  • HBase 写流程:

    • 数据先写入 WAL 持久化,用于宕机时恢复内存里丢失的数据;
    • 再写入内存态 MemStore,以一种跳表(SkipList)数据结构提供有序的数据和高效的随机读写;
    • 当满足特定条件时(比如内存中数据过多,或间隔时间过长),MemStore 数据以 HFile 格式写入 HDFS
  • HBase 读流程

    • 首次读某个 rowkey 时,client 需要从 Zookeeper 获取 hbase:meta 表位于哪个 RegionServer上;
    • 然后访问该 RegionServer 查询 hbase:meta 表该 rowkey 对应 region 所在的 RegionServer B;
    • Client 缓存该位置信息,去 RegionServer B 读取 rowkey;
    • 基于该region内可能存在该 rowkey 的 HFile 和 MemStore 构建一个最小堆,用以全局有序地 scan 数据(具体实现可搜索参考 LSM tree 设计原理)
  • Compaction

    • HBase 基于策略和定期整理 HFile 文件集合,将多个有序小文件合并成若干个有序的大文件。

    • HBase 提供两种 compaction 类型:

      • Minor compaction
      • Major compaction
    • Compaction 触发条件:

      • memstore flush
      • 后台线程周期性检查
      • 手动触发

HBase 架构设计

HBase 架构设计

image.png

主要组件包括

  • HMaster:元数据管理,集群调度、保活。
  • RegionServer:提供数据读写服务,每个实例负责若干个互不重叠的 rowkey 区间内的数据。
  • ThriftServer:提供Thrift API 读写的代理层。

依赖组件包括

  • Zookeeper:分布式一致性共识协作管理,例如HMaster 选主、任务分发、元数据变更管理等。
  • HDFS:分布式文件系统,HBase 数据存储底座。

HMaster

image.png

主要职责

  • 管理 RegionServer 实例生命周期,保证服务可用性
  • 协调 RegionServer 数据故障恢复,保证数据正确性
  • 集中管理集群元数据,执行负载均衡等维护集群稳定性
  • 定期巡检元数据,调整数据分布,清理废弃数据等
  • 处理用户主动发起的元数据操作如建表、删表等

主要组件

  • ActiveMasterManager:管理 HMaster 的 active/backup 状态
  • ServerManager:管理集群内 RegionServer 的状态
  • AssignmentManager:管理数据分片(region)的状态
  • SplitWalManager:负责故障数据恢复的 WAL 拆分工作
  • LoadBalancer:定期巡检、调整集群负载状态
  • RegionNormalizer:定期巡检并拆分热点、整合碎片
  • CatalogJanitor:定期巡检、清理元数据
  • Cleaners:定期清理废弃的 HFile/WAL 等文件
  • MasterFileSystem:封装访问 HDFS 的客户端 SDK

RegionServer

image.png

主要职责

  • 提供部分 rowkey 区间数据的读写服务
  • 如果负责 meta 表,向客户端 SDK 提供 rowkey 位置信息
  • 认领 HMaster 发布的故障恢复任务,帮助加速数据恢复过程
  • 处理 HMaster 下达的元数据操作,如 region 打开/关闭/分裂/合并操作等

主要组件

  • MemStore:基于 SkipList 数据结构实现的内存态存储,定期批量写入硬盘
  • Write-Ahead-Log:顺序记录写请求到持久化存储,用于故障恢复内存中丢失的数据
  • StoreFile:即 HFile,表示 HBase 在HDFS 存储数据的文件格式,其内数据按 rowkey 字典序有序排列
  • BlockCache:HBase 以数据块为单位读取数据并缓存在内存中以加速重复数据的读取

Zookeeper

image.png

主要职责

  • HMaster 登记信息,对 active/backup 分工达成共识
  • RegionServer 登记信息,失联时 HMaster 保活处理
  • 登记 meta 表位置信息,供 SDK 查询读写位置信息
  • 供 HMaster 和 RegionServer 协作处理分布式任务

ThriftServer

image.png

主要职责

  • 实现 HBase 定义的 Thrift API,作为代理层向用户提供 RPC 读写服务
  • 用户可根据 IDL 自行生成客户端实现
  • 独立于 RegionServer 水平扩展,用户可访问任意 ThriftServer 实例