大数据技术学习——HBase
1 一句话介绍
HBase是面向列的分布式实时数据库,适合存储非结构化以及半结构化数据。
2 行式存储&列式存储
行式存储、列式存储的最主要区别在于数据库底层(磁盘层面)组织数据的方式不一样。
2.1 行式存储
传统的关系型数据都是行式存储,即每一行数据在磁盘上是连续存储的。特性如下:
- 适合OLTP场景
- 适合随机地增删改查操作
- 适合频繁插入或更新数据
- 不适合大量数据的聚合
2.2 列式存储
每一列数据可作为单独文件在磁盘上是连续存储的,列与列之间可不连续存储。特性如下:
- 适合OLAP场景
- 适合大量数据的聚合操作(可以只读取必要的列)
- 利于压缩存储空间(同一列数据类型相同)
3 HBase数据结构
HBase是面向列存储的,并非严格意义上的列式数据库。本质是多级嵌套的Key-Value字典,底层以HFile格式存储。
3.1 逻辑结构
- RowKey是检索数据的主键,并且会按照字母表进行排序。
- Column由列簇以及列修饰符构成,即column family:column qualifier。每个列簇保留为一份单独的文件。
- 数据实际以Map形式组织,其中{RowKey、Timestamp、Column }组成Key,确定唯一的存储单元Cell,其中Timestamp倒序排列。
3.2 物理结构
- RegionServer:负责提供表数据读写等服务,通常与HDFS DataNode部署在一起。一个节点可部署一个或多个RegionServer。一个RegionServer可管理多个Region。
- Region:大表根据RowKey取值范围切分成多个Region(即完整的子表)。一个Region由多个Store构成。
- Store:Store由多个StoreFile组成,且以HFile格式存储Region上每个列簇的数据。HFile中每对Key-Value就是一个Byte数组。
- MemStore:与Store一一对应关系,缓存客户端插入数据,容量达上限再刷盘到StoreFile。
- HLog:即WAL(Write Ahead Log),记录数据的变更信息。与RegionServer一一对应,一旦RegionServer宕掉,MemStore数据可能丢失,其他的RegionServer可根据HLog恢复数据。
3.3 LSM树
LSM(Log Structure Merge,日志结构合并)树并非类似B树那样的数据结构,而是一种数据存储结构。NoSQL数据库基本都采用LSM树作为数据存储结构。
- 日志结构:数据顺序写(Append)到文件中,因此写性能高,但是往往数据无序,读性能差。反之,要保证数据有序,就需要根据索引随机写(插入)表中,写性能差,另外索引(例如B树)需要重构。
- 合并树:将各自有序的小树合并成有序的大树,可通过Merge Sort算法排序。
HBase采用LSM树的思想,牺牲部分读性能,极大提高了写性能:
- 数据顺序写入WAL,保证写性能,同时保障数据不丢失。
- 数据先写入内存的memtable(采用红黑树或跳表等保证数据有序)。memtable满了转化成只读的immutable。适当时机immutable刷盘到磁盘上保存为sstable(有序键值对集合)。
- 多个小的有序的sstable会通过compact操作合并成大的有序的sstable。
4 HBase架构图
- Client可缓存频繁访问的Region位置信息
- Master仅维护Region,不参与实际数据读写,负载较低。为RegionServer分配Region,负责RegionServer的负载均衡,重分配RegionServer上宕掉的Region。
- RegionServer负责切分过大的Region,处理数据读写请求。
- ZooKeeper保证单一主Master,并且存储Meta表所在的RegionServer位置信息
5 HBase读流程
5.1 读流程
- Client从ZooKeeper中获得Meta表所在RegionServer位置信息。
- Client根据RowKey从Meta表中找到数据所在的Reigon以及相应的RegionServer。
- Client联系RegionServer获取数据。RegionServer会扫描MemStore以及StoreFile。
5.2 写流程
- Client从ZooKeeper中获得Meta表所在RegionServer位置信息。
- Client根据RowKey决定写入的Region以及相应的RegionServer。
- Client对RegionServer发起写入请求,并先将数据写入HLog,再写入MemStore。
- MemStore每次刷盘都会形成一个StoreFile,达到一定数量后触发Compact操作合并StoreFile。
Compact操作分为Minor Compact及Major Compact。Minor仅合并数据,并不执行具体删除操作;Major删除先前标记删除的数据,删除超过TTL版本数据。
6 HBase Snapshot
HBase的快照(Snapshot)不同于传统意义上的某一个时刻完整数据拷贝,它仅仅是在某一个时刻所有数据的完整指针。流程如下:
- 加锁,不允许数据更新删除。
- 刷盘,将MemStore中的数据flush到StoreFile中。
- 建指针,为所有StoreFile新建引用指针,并记录到Snapshot文件中。
- HMaster汇总各个Region的Snapshot文件。
如要恢复快照时刻的数据,只需根据引用指针找到该时刻的数据并进行恢复即可。
7 HBase二级索引(ElasticSearch方案)
HBase里面只有RowKey作为一级索引, 如果要对非RowKey字段进行数据检索和查询, 往往要通过MapReduce/Spark等分布式计算框架进行,硬件资源消耗和时间延迟都会比较高。
用ES为HBase添加二级索引方案:ES存储RowKey以及需要被频繁检索的字段。客户端根据检索字段返回RowKey,再根据RowKey从HBase中检索出完整数据。
8 参考
- https://www.jianshu.com/p/c4e3d847f529
- https://dzone.com/articles/understanding-hbase-and-bigtab
- https://juejin.cn/post/6844904118872440840
- https://cloud.tencent.com/developer/news/758459
- https://cloud.tencent.com/developer/article/1338417?from=information.detail.hbase%E5%AD%98%E5%82%A8%E7%BB%93%E6%9E%84
- https://blog.csdn.net/MingYueZh/article/details/80844925
- http://hbasefly.com/2017/09/17/hbase-snapshot/
- Apache HBase ™ Reference Guide
- https://zhuanlan.zhihu.com/p/342664514
- 点赞
- 收藏
- 关注作者
评论(0)