这是我参与「第四届青训营 」笔记创作活动的第11天。
Hbase基于HDFS实现计算存储分离架构的分布式表格存储服务
这节课程主要分为四个方面:
-
介绍 HBase 的适用场景和数据模型,设计理念
-
分析 HBase 的整体架构和模块设计
-
针对大数据场景 HBase 的解决方案,介绍HBase针对海量数据场景所做的设计优化,包括水平扩展能力,负载均衡能力,故障修复机制
-
分享 HBase 大规模实战的最佳实践
HBase适用场景
HBase是一个开源的NoSQL分布式数据库,是Apache软件基金会顶级项目之一,参考GoogleBgiTable的设计,对稀疏表提供更高的存储空间使用率和读写效率
HBase 是存储计算分离架构, 以 HDFS 作为分布式存储底座。数据实际存储在 HDFS。 计算层提供灵活快速的水平扩展,负载均衡和故障修复机制。
HBase和关系型数据库的区别
HBase 数据模型
HBase以列族组织数据,以行键索引数据。
想要定位到一个具体的值需要(行键+列族+列名+版本号)
HBase 物理模型
物理数据结构最小单元KeyValue结构:
同一行,同一列族的数据物理上连续有序存储
同列族内的KeyValue、Value按rowkey字典序升序,column qualifier升序,version降序排列。
不同列族的数据存储在相互独立的物理文件,列族键不保证数据全局有序。
同列族下不同物理文件间不保证数据全局有序
仅单个物理文件内有序。
使用场景-半结构化/字典序有序索引的数据
使用场景-“近在线”海量分布式KV/宽表存储
使用场景-写密集型的高吞吐场景
HBase数据模型的优势
HBase架构设计
HMaster 有点像HDFS中的NameNode
HBase依赖于ZooKeeper
HMaster
元信息管理组件,以及集群调度、保活等功能。通常部署一个主节点和一到多个备节点,通过Zookeeper选主。
RegionServer
提供数据读写服务,每个实例负责一段不重叠的连续rowkey范围内的数据。
负责mate表,向客户端SDK提供rowkey位置信息
ZooKeeper主要职责
提供分布式一致性的元数据管理服务。HBase使用Zookeeper实现master节点信息登记、master节点选主、RegionServer信息登记、分布式任务管理等功能。
ThriftServer
提供一层以Thrift协议访问数据的代理层。
大数据支撑
HBase针对海量数据场景的设计优化,包括水平扩展能力,负载均衡策略,故障恢复机制
HBase在大数据生态的定位
水平扩展能力
增加RegionServer实例,分配部分Region到新实例。
扩展过程平滑,无需搬迁实际数据
可用性影响时间很短,用户基本无感知
Region热点切分
当某个region数据量过多,切分成两个独立的子region分摊负载
RegionServer在特定实际检查region是否应该切分,计算切分点并RPC上报HMaster,由AssignmentManager负责执行RegionStateTransition。
不搬迁实际数据,切分产生的新region数据目录下生成一个以原region文件信息命名的文件,内容是切分点对应的rowkey,以及标识新region是上/下半部分的数据。
Region热点切分-切分点选取
HBase原生提供的多种切分策略使用相同的切分点选择策略
目标:优先把最大的数据文件均匀切分
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区间。
每个region分别负责原region的上/下半部分rowkey区间的数据。
在compaction执行前不实际切分文件,新region下的文件通过reference file指向原文件读取实际数据。
Region热点切分-流程设计
Region 碎片整合
Region 负载均衡
定期巡各个RegionServer上的Region数量,保持region的数量均匀分布子各个RegionServer上。
其他策略
故障恢复机制-HMaster
HMaster通过多实例基于ZooKEEPer选主实现高可用性
故障恢复机制-HMaster恢复流程
故障恢复机制-RegionServer
Distributed Log Split原理-优化空间
1,写入HBase的数据首先顺序持久化到write-Ahead-Log,然后写入内存态的MenStore即完成,不立即写盘,RegionServer故障会导致内存中数据丢失,需要回放WAL来恢复
2.同RegionServer的所有region复用WAL,因此不同region的数据交错穿插,RegionServer故障后重新分配region前需要先按region维度拆分WAL。
重要部件: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监听接收任务
最佳实践
rowkey设计策略
为什么要设计rowkey,rowkey决定我们数据存储的物理位置,好的rowkey设计有利于读数据的处理,不如查找,删除等
Cloumn Family设计策略
Column famaily 数量过多容易影响性能,建议尽量少
为了充分发挥按列族读取的性质,把同事读取的数据尽量放在相同的列族,反之亦然
参数调优经验
ByteTable-字节自研分布式表格存储系统
总结
- 1.学习了HBase的架构设计,以及各个组件HMaster,RegionServer,Zookeeper,HDFS等
- 2.学习了HBase的热点切分,碎片整合,负载均衡以及故障修复
- 3.学习了一些项目实践,以及在具体场景对HBase的具体设计
标题:深入浅出 HBase 实战 | 青训营笔记
网址:juejin.cn/