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

219 阅读6分钟

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

    Hbase基于HDFS实现计算存储分离架构的分布式表格存储服务

这节课程主要分为四个方面:

  1. 介绍 HBase 的适用场景和数据模型,设计理念

  2. 分析 HBase 的整体架构和模块设计

  3. 针对大数据场景 HBase 的解决方案,介绍HBase针对海量数据场景所做的设计优化,包括水平扩展能力,负载均衡能力,故障修复机制

  4. 分享 HBase 大规模实战的最佳实践

HBase适用场景

HBase是一个开源的NoSQL分布式数据库,是Apache软件基金会顶级项目之一,参考GoogleBgiTable的设计,对稀疏表提供更高的存储空间使用率和读写效率

HBase 是存储计算分离架构, 以 HDFS 作为分布式存储底座。数据实际存储在 HDFS。 计算层提供灵活快速的水平扩展,负载均衡和故障修复机制。

HBase和关系型数据库的区别

image.png

HBase 数据模型

HBase以列族组织数据,以行键索引数据。

image.png

想要定位到一个具体的值需要(行键+列族+列名+版本号)

image.png

HBase 物理模型

物理数据结构最小单元KeyValue结构:

image.png

同一行,同一列族的数据物理上连续有序存储

同列族内的KeyValue、Value按rowkey字典序升序,column qualifier升序,version降序排列。

不同列族的数据存储在相互独立的物理文件,列族键不保证数据全局有序。

同列族下不同物理文件间不保证数据全局有序

仅单个物理文件内有序。

image.png

image.png

使用场景-半结构化/字典序有序索引的数据

image.png

使用场景-“近在线”海量分布式KV/宽表存储

image.png

image.png

使用场景-写密集型的高吞吐场景

image.png

HBase数据模型的优势

image.png

HBase架构设计

image.png

image.png

HMaster 有点像HDFS中的NameNode

HBase依赖于ZooKeeper

HMaster

元信息管理组件,以及集群调度、保活等功能。通常部署一个主节点和一到多个备节点,通过Zookeeper选主。

image.png

image.png

RegionServer

提供数据读写服务,每个实例负责一段不重叠的连续rowkey范围内的数据。

负责mate表,向客户端SDK提供rowkey位置信息

image.png

image.png

ZooKeeper主要职责

提供分布式一致性的元数据管理服务。HBase使用Zookeeper实现master节点信息登记、master节点选主、RegionServer信息登记、分布式任务管理等功能。

image.png

ThriftServer

提供一层以Thrift协议访问数据的代理层。

image.png

大数据支撑

HBase针对海量数据场景的设计优化,包括水平扩展能力,负载均衡策略,故障恢复机制

HBase在大数据生态的定位

image.png

水平扩展能力

增加RegionServer实例,分配部分Region到新实例。

扩展过程平滑,无需搬迁实际数据

可用性影响时间很短,用户基本无感知

image.png

Region热点切分

当某个region数据量过多,切分成两个独立的子region分摊负载

RegionServer在特定实际检查region是否应该切分,计算切分点并RPC上报HMaster,由AssignmentManager负责执行RegionStateTransition。

不搬迁实际数据,切分产生的新region数据目录下生成一个以原region文件信息命名的文件,内容是切分点对应的rowkey,以及标识新region是上/下半部分的数据。

image.png

Region热点切分-切分点选取

HBase原生提供的多种切分策略使用相同的切分点选择策略

目标:优先把最大的数据文件均匀切分

image.png

image.png

image.png

HFile以固定长度的Block组织的

切分点选择步骤:

  • 1.找到Table A中那个Region的数据大小最大
  • 2.找到该region内那个column family的数据大小最大
  • 3.找到column family内哪个HFile数据大小最大
  • 4.找到HFile里处于最中间位置的Data Block
  • 5.用这个Data block 的第一条KeyValue的Rowkey作为切分点
Region热点切分-切分过程

找到切分点位置

所有的Column Family都按照统一的切分点来切分数据。

目的就是为了优先均分最大的文件,不保证所有的Column Family的所有文件都被均分。

HFile 1 作为最大的文件被均分,其他文件也必须一线工的rowkey切分以保证对齐新region的rowkey区间。

image.png

每个region分别负责原region的上/下半部分rowkey区间的数据。

在compaction执行前不实际切分文件,新region下的文件通过reference file指向原文件读取实际数据。

image.png

image.png

Region热点切分-流程设计

image.png

Region 碎片整合

image.png

Region 负载均衡

定期巡各个RegionServer上的Region数量,保持region的数量均匀分布子各个RegionServer上。

image.png

image.png

其他策略

image.png

故障恢复机制-HMaster

HMaster通过多实例基于ZooKEEPer选主实现高可用性

image.png

故障恢复机制-HMaster恢复流程

image.png

image.png

故障恢复机制-RegionServer

image.png

image.png

Distributed Log Split原理-优化空间

1,写入HBase的数据首先顺序持久化到write-Ahead-Log,然后写入内存态的MenStore即完成,不立即写盘,RegionServer故障会导致内存中数据丢失,需要回放WAL来恢复

2.同RegionServer的所有region复用WAL,因此不同region的数据交错穿插,RegionServer故障后重新分配region前需要先按region维度拆分WAL。

image.png

重要部件:WAL,用来恢复数据

主要流程:

regionsever故障发生->ZooKeeper监听到通知HMaster->HMaster从HDFS中实例该RS的WAL文件列表->Hmaster将每一个WAL发布一个log split task 到ZK->RS监听到分别认领->ZK将WAL文件列表按region拆分,分别写入HDFS上该region的recovered.edits->HMaster监听到log split任务完成,调度region到其他RS->RS打开region前在HDFS找到先回放recovered.edit目录下的WAL文件将数据恢复到Memstore里,再打开region恢复读写服务

主要功能: RS故障发生;ZooKeeper监听 ;HMaster负责安排处理故障 ;其他RS监听接收任务

image.png

image.png

image.png

image.png

最佳实践

rowkey设计策略

为什么要设计rowkey,rowkey决定我们数据存储的物理位置,好的rowkey设计有利于读数据的处理,不如查找,删除等

image.png

Cloumn Family设计策略

Column famaily 数量过多容易影响性能,建议尽量少

为了充分发挥按列族读取的性质,把同事读取的数据尽量放在相同的列族,反之亦然

参数调优经验

image.png

ByteTable-字节自研分布式表格存储系统

总结

  • 1.学习了HBase的架构设计,以及各个组件HMaster,RegionServer,Zookeeper,HDFS等
  • 2.学习了HBase的热点切分,碎片整合,负载均衡以及故障修复
  • 3.学习了一些项目实践,以及在具体场景对HBase的具体设计

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

网址:juejin.cn/