深入浅出HBase | 青训营笔记

267 阅读3分钟

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

HDFS与HBase的关系

HDFS通常采用 三副本冗余 存储数据到不同的机器来实现容灾备份能力。 HBase基于HDFS实现存储计算分离架构的分布式表格存储服务。

HBase介绍

性质

在CAP系统中属于CP系统。 (consistency、availability、partition torlerance,业界认为后两者不可兼得)

与关系型数据库的区别

image.png

数据模型优缺点

image.png

逻辑结构

注:下图是为了体现两个特点:

  • 以column family 为单位存储数据
  • 以rowkey索引数据 image.png 非关系型视图:

image.png 缺省数据不占用存储空间

物理结构

最小单元是KeyValue

image.png

适用场景

image.png 简要总结:海量数据,数据分布稀疏

使用场景举例

半结构化/字典序有序索引的数据

  • 字节推荐中台基于HBase提供“近在线”读写的推荐候选数据集

image.png

  • 商家订单系统

image.png

  • 12年前开始facebook用HBase存储用户的互动消息

image.png

写密集型的高吞吐场景

时序存储引擎(如日志、监控数据存储),如Open Times Series Database

image.png

架构设计

image.png

  • HMaster如其名,是枢纽和核心,负责元数据管理、集群调度、监测节点是否宕机等等。
  • RegionServer提供数据读写服务,可以有多个RS,每个负责一部分(不重叠)rowkey的数据。
  • ThriftServer提供Thrift API读写代理层。

还会和一些组件交互,比如Zookeeper、HDFS等。

HMaster

image.png

RegionServer的主要职责

image.png

  • MemStore:基于SkipList实现,定期批量写入硬盘
  • write-ahead-log:顺序记录写请求到持久化存储,用于故障恢复内存中丢失的数据
  • StoreFile:字面意思,HBase的文件格式
  • BlockCache:字面意思,数据缓存快

ZooKeeper主要职责

image.png

ThriftServer主要职责

image.png

HBase的设计优化

水平拓展能力

image.png 注:数据实际上仍属于源文件,只是将其分片迁移到了新的region实例。

Region热点切分

与上一条对应,当region过大(或其他情况,如flush\compaction)计算切分点并切分,不迁移实际数据。 image.png

切分策略

  • 贪心:优先把最大的数据文件均匀切分 (注:不保证所有Column Family的所有文件都被均分;其他文件必须以和最大文件相同的rowkey切分,以保证对齐新region的rowkey区间)
  • 二分:找到HFile里处于最中间位置的DataBlock,用其第一条KeyValue的BlockKey作为切分点。

在compaction执行前不实际切分文件,新region 下的文件通过reference file指向原文件读取数据(个人理解:指针思想)

切分流程

通过状态机实现

image.png

Region碎片整合

当region数据量过小、碎片化时,合并相邻region。 只允许合并相邻region(因为有要求,rowkey空间须连续且不重合)

Region负载均衡

目标:保持region数量均匀分布在各个RegionServer上。

  • 策略一(栈思想)

image.png

  • 策略二(cost function)

image.png

  • 策略三(文件读取及预案) image.png

HMaster恢复机制

HM自身

image.png

调度RegionServer

image.png

RegionServer恢复机制

image.png

具体流程

image.png

Distributed Log Split

  • 原理

image.png

  • 具体流程

image.png

优化思路:

image.png

rowkey设计

  • 不需要顺序扫描批量连续rowkey时 哈希做前缀(避免占用过多存储空间)

  • 需要顺序扫描批量连续rowkey时

image.png

注意:两种场景都应避免直接用时间戳作为前缀,因为会导致最新数据始终集中在单个RS,且无法通过水平扩展缓解。

colunm family设计

image.png

关于参数调优

image.png

ByteTable:字节自研可替代HBase的产品

image.png