大数据技术学习——HBase

举报
slx_share 发表于 2023/02/25 18:16:46 2023/02/25
【摘要】 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形式组织,其中{RowKeyTimestampColumn }组成Key,确定唯一的存储单元Cell,其中Timestamp倒序排列。

3.2       物理结构


  • RegionServer:负责提供表数据读写等服务,通常与HDFS DataNode部署在一起。一个节点可部署一个或多个RegionServer。一个RegionServer可管理多个Region
  • Region:大表根据RowKey取值范围切分成多个Region(即完整的子表)。一个Region由多个Store构成。
  • StoreStore由多个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       读流程


  • ClientZooKeeper中获得Meta表所在RegionServer位置信息。
  • Client根据RowKeyMeta表中找到数据所在的Reigon以及相应的RegionServer
  • Client联系RegionServer获取数据。RegionServer会扫描MemStore以及StoreFile

5.2       写流程

  • ClientZooKeeper中获得Meta表所在RegionServer位置信息。
  • Client根据RowKey决定写入的Region以及相应的RegionServer
  • ClientRegionServer发起写入请求,并先将数据写入HLog,再写入MemStore
  • MemStore每次刷盘都会形成一个StoreFile,达到一定数量后触发Compact操作合并StoreFile

Compact操作分为Minor CompactMajor CompactMinor仅合并数据,并不执行具体删除操作;Major删除先前标记删除的数据,删除超过TTL版本数据。

6       HBase Snapshot

HBase的快照(Snapshot)不同于传统意义上的某一个时刻完整数据拷贝,它仅仅是在某一个时刻所有数据的完整指针。流程如下:


  • 加锁,不允许数据更新删除。
  • 刷盘,将MemStore中的数据flushStoreFile中。
  • 建指针,为所有StoreFile新建引用指针,并记录到Snapshot文件中。
  • HMaster汇总各个RegionSnapshot文件。

如要恢复快照时刻的数据,只需根据引用指针找到该时刻的数据并进行恢复即可。

7       HBase二级索引(ElasticSearch方案)

HBase里面只有RowKey作为一级索引, 如果要对非RowKey字段进行数据检索和查询, 往往要通过MapReduce/Spark等分布式计算框架进行,硬件资源消耗和时间延迟都会比较高。

ESHBase添加二级索引方案:ES存储RowKey以及需要被频繁检索的字段。客户端根据检索字段返回RowKey,再根据RowKeyHBase中检索出完整数据。

8       参考

 

 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。