这是我参与「第四届青训营」笔记创作活动的第10天
HDFS与HBase的关系
HDFS通常采用 三副本冗余 存储数据到不同的机器来实现容灾备份能力。 HBase基于HDFS实现存储计算分离架构的分布式表格存储服务。
HBase介绍
性质
在CAP系统中属于CP系统。 (consistency、availability、partition torlerance,业界认为后两者不可兼得)
与关系型数据库的区别
数据模型优缺点
逻辑结构
注:下图是为了体现两个特点:
- 以column family 为单位存储数据
- 以rowkey索引数据
非关系型视图:
缺省数据不占用存储空间
物理结构
最小单元是KeyValue
适用场景
简要总结:海量数据,数据分布稀疏
使用场景举例
半结构化/字典序有序索引的数据
- 字节推荐中台基于HBase提供“近在线”读写的推荐候选数据集
- 商家订单系统
- 12年前开始facebook用HBase存储用户的互动消息
写密集型的高吞吐场景
时序存储引擎(如日志、监控数据存储),如Open Times Series Database
架构设计
- HMaster如其名,是枢纽和核心,负责元数据管理、集群调度、监测节点是否宕机等等。
- RegionServer提供数据读写服务,可以有多个RS,每个负责一部分(不重叠)rowkey的数据。
- ThriftServer提供Thrift API读写代理层。
还会和一些组件交互,比如Zookeeper、HDFS等。
HMaster
RegionServer的主要职责
- MemStore:基于SkipList实现,定期批量写入硬盘
- write-ahead-log:顺序记录写请求到持久化存储,用于故障恢复内存中丢失的数据
- StoreFile:字面意思,HBase的文件格式
- BlockCache:字面意思,数据缓存快
ZooKeeper主要职责
ThriftServer主要职责
HBase的设计优化
水平拓展能力
注:数据实际上仍属于源文件,只是将其分片迁移到了新的region实例。
Region热点切分
与上一条对应,当region过大(或其他情况,如flush\compaction)计算切分点并切分,不迁移实际数据。
切分策略
- 贪心:优先把最大的数据文件均匀切分 (注:不保证所有Column Family的所有文件都被均分;其他文件必须以和最大文件相同的rowkey切分,以保证对齐新region的rowkey区间)
- 二分:找到HFile里处于最中间位置的DataBlock,用其第一条KeyValue的BlockKey作为切分点。
在compaction执行前不实际切分文件,新region 下的文件通过reference file指向原文件读取数据(个人理解:指针思想)
切分流程
通过状态机实现
Region碎片整合
当region数据量过小、碎片化时,合并相邻region。 只允许合并相邻region(因为有要求,rowkey空间须连续且不重合)
Region负载均衡
目标:保持region数量均匀分布在各个RegionServer上。
- 策略一(栈思想)
- 策略二(cost function)
- 策略三(文件读取及预案)
HMaster恢复机制
HM自身
调度RegionServer
RegionServer恢复机制
具体流程
Distributed Log Split
- 原理
- 具体流程
优化思路:
rowkey设计
-
不需要顺序扫描批量连续rowkey时 哈希做前缀(避免占用过多存储空间)
-
需要顺序扫描批量连续rowkey时
注意:两种场景都应避免直接用时间戳作为前缀,因为会导致最新数据始终集中在单个RS,且无法通过水平扩展缓解。