Hbase架构设计和源码-基本记录第一篇

本文详细阐述了HBase作为分布式存储系统如何通过内存优化、布隆索引、范围分区等技术实现快速随机读写,重点讲解了元数据管理、WAL机制和数据安全性。同时介绍了rowkey设计、过滤器/布隆过滤器以及协处理器在性能优化中的作用。
摘要由CSDN通过智能技术生成

Hbase介绍

读懂LSM的意义 这篇文章写得太好了

意义

HDFS虽然是分布式存储,但是做不到随机低延迟的读写。
Hive可以以SQL形式转换MR/Spark,减少开发难度,但是性能没有变化。
所以Hbase存在的意义就是解决随机低延迟读写的分布式存储问题,查询快。但不是最适合于做聚合计算,OLAP分析的场景

目标:低延迟的随机读写
低延迟,分布式,支持记录级别CRUD,保证数据一致性

思路

在这里插入图片描述

提高查询性能的实现

1 查询先查内存的读缓存,没有再查磁盘
2 内存数据设计良好高性能的数据结构 (ConcurrentSkillListMap)
3 磁盘数据 + 布隆索引
4 范围分区 + 排序 
先排序,然后范围分区 + 分段扫描
注:排序好后位置已确定,磁盘中再插入不好解决。所以数据先放入内存中排序,插入时则内存中位置转换即可,最后溢写磁盘
5 跳表结构
元数据表记录各个数据分段存在哪些节点,大大提高性能。然后再创建root元数据表记录各个元数据表分段信息,形成跳表的思路
1.x 之前默认每个region最大128mb,空间很小所以加入三层,user table,meta table, root table
1.x 之后默认每个region最大10G,空间变大后改为两层,去掉了root table
另外客户端中还会缓存元数据
6 读缓存 + 写缓存
内存缓存会做常用的热缓存,提高缓存命中率。数据先写内存,内存不足时,则数据内存中排序后有序的写入磁盘,读写缓存分离
当读磁盘时,读取涉及多个磁盘文件,添加布隆过滤器来判定数据是否在这个磁盘文件中,不在则直接下一个磁盘文件不用扫描
当磁盘中分段数据太大,超过10G则split拆分为2,split是直接拆分,依然前后保持数据有序。

在这里插入图片描述
提高数据安全性实现

1 内存 + 磁盘
2 WAL机制

Hbase总结

在这里插入图片描述
在这里插入图片描述

以空间换时间,rowkey会重复存储,所以2.x版本后加入字典树来优化存储rowkey,降低冗余,提高查询效率
rowkey可以是任意字符串,最大64kb,实际应用一般10-100字节,最好16字节

多个列族时,则有多个Store

基本API使用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

各个组件和模块功能

ZK职责

在这里插入图片描述

master不和rs集群通讯,rs集群和zk汇报信息,master只监听zk子节点的变化即可。
即如集群添加一个rs,子节点会增加一个,master则能够感知到

Hbase 元数据

1 表结构信息 2 表region分布信息

Master 职责

在这里插入图片描述

单主多从,单节点宕机,部分功能不可用。当Master不存在时,依然支持数据的读写。
但是 1 不能再建表,修改表结构 2 不能再处理如region的切分等造成的元数据变动

RegionServer 职责

在这里插入图片描述
在这里插入图片描述

注意点

在这里插入图片描述

读数据流程

在这里插入图片描述

1 确定元信息region在哪个节点。上图是1.x版本之前,1.x版本之后则没有root表,其他思路一致
(第二次查询时,client有保存缓存则直接走第4步)

在这里插入图片描述
写数据流程
在这里插入图片描述

第七步之后可能会触发写磁盘,HFile增加到三个可能触发合并文件Compact
StoreFile内部合并为minor compact,HRegion整个合并为major compact

在这里插入图片描述

WAL

在这里插入图片描述
在这里插入图片描述

简单来说就是直接顺序写磁盘性能很低,所以在内存中做排序,内存达到阈值时再写磁盘。
但是内存做大量处理不安全,所以加入HLog顺序写数据,用来防止异常修复数据。将随机磁盘写变成一次顺序磁盘写+内存写

HFile数据组织结构
在这里插入图片描述

1 File info 是整个数据段的描述信息,Data Index是Data段的索引,Meta Index是Meta段的索引
2 读取HFile首先读取Trailer,Trailer记录其他数据块(如File Info/Data Index)的偏移量,有指针指向其他数据块的起始点
3 Data段是记录图上图下展开的Key Value格式

具体Data段展开的Key-Value格式信息

在这里插入图片描述

Key Length/Value Length 分别用4字节记录key和value的实际占用大小
Hbase所有增删改都是append操作,通过KeyType来区分,KeyType记录put/delete两个值。
内存删除操作是及时的,这里的磁盘删除时KeyType delete记录,然后在HFile合并的时候真正物理删除

HLog日志

在这里插入图片描述
表设计

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

两种优化

在这里插入图片描述
rowkey设计

在这里插入图片描述
过滤器/布隆过滤器

用到了查就行
布隆过滤器:查询时,多个hash函数计算对应的位置结果都是1,则代表数据已存在

协处理器

不再需要全表扫描计算等,直接得到统计数据结果。谓词下推,提前计算
也可以通过协处理器实现二级索引/倒排索引,即通过value找key。插入key-value时,协处理器自动再插入value-key,但冗余很大
一般企业内Hbase + ES 构建倒排索引更普遍

在这里插入图片描述
总结

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我爱肉肉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值