深入浅出 HBase 实战 | 青训营笔记

124 阅读3分钟

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

HBase基础概念

什么是HBase

  • HBase是一个开源NoSQL分布式数据库

  • HBase的半结构化数据模型。以列族为单位存储数据,行键索引数据

  • 稀疏表提供更高的存储更高的存储空间使用率和读写效率。

  • HBase基于HDFS实现存储计算分离架构的分布式表格存储服务 计算层提供灵活快速的水平扩展,负载均衡和故障恢复能力

  • 提供强一致语义,属于CP系统

数据模型

image.png

逻辑结构

  • 适合稀疏数据,缺省列不占存储空间
  • 定义一个值 (行键 + 类族 + 列名 + 版本号)
  • 允许批量读取多行的部分列族/列数据

image.png

物理结构

  • 物理数据结构最小单元是KeyValue结构
  • 每个版本的数据都携带全部行列信息
  • 同一行,同一列族的数据物理上连续有序存储
  • 同族内的KeyValue按rowkey字典升序,column qualifier升序,version降序排列
  • 不同族的数据存储在相互独立的物理文件中,列族间和同列族下不同物理文件间不保证数据全局有序,仅单个物理文件内有序

image.png

优缺点

image.png

HBase和关系型数据库的区别

image.png

HBase 读取流程

详细了解一文讲清HBase存储结构 - 掘金 (juejin.cn)

  • HBase写流程

    • 数据先写入 WAL 持久化, 用于宕机时恢复内存的丢失的数据。
    • 再写如内存态MemStore,以一种跳表数据结构有序的数据和高效的随机读写
    • 当满足特定条件时,MenStore数据以HFile格写入HDFS
  • HBase读写流程

    • 首次读某个rowkey时, client需要Zookeepe获取hbase: hbase:meta 表位于 哪个RegionSever
    • 然后访问该RegionSever查询hbase:meta比rowkey对应region所在 RegionSever B
    • Clent缓存该位置,去RegionSever B读取rowkey
    • 基于该region内rowkey的HFile和MemStore构造一个最小堆,用以全局有序地scan数据

使用场景

  • 写密集型的高吞吐、高吞吐应用,可接受一定程度的时延抖动
  • “近在线”海量分布式KV/宽表存储,数据量级可达到PB级以上
  • 字典序主键索引、批量顺序扫描多行数据的场景
  • Hadoop大数据生态友好兼容
  • 敏捷平滑的水平扩展能力,快速响应数据体量、流量变化
  • 半结构化数据模型,行列稀疏的数据分布,动态增减列名
  • 敏捷的水平扩展能力,快速响应数据体量、流量变化

HBase 架构设计

  • 主要组件包括
    • HMaster
      • 元数据管理,集群调度、保活
    • RegionServer
      • 提供数据读写服务,每个实例负责若干个互不重叠的rowkey区间的数据
    • TyihriftServer
      • 提供Thrift API读写的代理层
  • 依赖组件包括
    • Zookeeper
      • 分布式一致性共识协作管理, 例如:HMaster选主、任务分发、元数据变更管理等
    • HDFS
      • 分布式文件系统,HBase数据存储丢走存储

image.png