这是我参与「第四届青训营 」笔记创作活动的的第6天
HBase基础概念
什么是HBase
-
HBase是一个开源NoSQL分布式数据库
-
HBase的半结构化数据模型。以列族为单位存储数据,行键索引数据
-
对稀疏表提供更高的存储更高的存储空间使用率和读写效率。
-
HBase基于HDFS实现存储计算分离架构的分布式表格存储服务 计算层提供灵活快速的水平扩展,负载均衡和故障恢复能力
-
提供强一致语义,属于CP系统
数据模型
逻辑结构
- 适合稀疏数据,缺省列不占存储空间
- 定义一个值 (行键 + 类族 + 列名 + 版本号)
- 允许批量读取多行的部分列族/列数据
物理结构
- 物理数据结构最小单元是KeyValue结构
- 每个版本的数据都携带全部行列信息
- 同一行,同一列族的数据物理上连续有序存储
- 同族内的KeyValue按rowkey字典升序,column qualifier升序,version降序排列
- 不同族的数据存储在相互独立的物理文件中,列族间和同列族下不同物理文件间不保证数据全局有序,仅单个物理文件内有序
优缺点
HBase和关系型数据库的区别
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读写的代理层
- HMaster
- 依赖组件包括
- Zookeeper
- 分布式一致性共识协作管理, 例如:HMaster选主、任务分发、元数据变更管理等
- HDFS
- 分布式文件系统,HBase数据存储丢走存储
- Zookeeper