HBase原理|青训营笔记

127 阅读4分钟

HBase原理|青训营笔记

HBase概念

HBase:Hadoop Database,是一个高可靠、高性能、面向列、可伸缩、实时读写的分布式数据库。利用HBase技术可在廉价的PC Server上搭建大规模结构化存储集群。

HBase特性:

  • 高可靠:数据高可靠性:HBase利用Hadoop HDFS作为其文件存储系统;服务高可靠性:HBase利用Zookeeper作为协同服务。
  • 高性能:传统关系型数据库在上亿条数据中查询时,速度极其慢。相比之下,HBase在上亿行、上百万列、上万个版本的数据上做查询时,速度要远高于传统关系型数据库。
  • 面向列:与传统数据库按行存储数据的方式不同,HBase是按列存储数据。
  • 可伸缩:HBase的集群节点数量可多可少。
  • 实时读写:HBase的读写时间是毫秒级的。

HBase基本架构

QQ截图20220820221837.png 从HBase的架构图上可以看出,HBase中的组件包括Client、Zookeeper、HMaster、HRegionServer、HRegion、Store、MemStore、StoreFile、HFile、HLog等,其作用如下所示
Client

  • 包含访问HBase的接口,并维护cache来加快对HBase的访问;
  • HBase集群的访问入口,通过RPC方式和HMaster、HRegionServer通信;
  • 与HMaster进行通信进行管理表的操作,与HRegionServer进行数据读写类操作。

Zookeeper

  • 提供 Failover机制,保证任何时候,集群中只有一个HMaster;

  • 实时监控HRegionServer的上线和下线信息,并实时通知给HMaster;

  • 存储-ROOT-表地址(0.96版本之前,0.96版本后存储了.meta.表)、HMaster地址,HBase的schema和table元数据。

HMaster

  • HMaster维护表和HRegion的元数据

  • 负责HRegionServer的负载均衡,调整HRegion分布,负责失效HRegionServer上的HRegion迁移工作;

  • 管理用户对Table表的增、删、改、查操作;

  • HDFS上的垃圾文件回收。

HRegionServer

  • 维护HRegion,处理HRegion的IO请求;

  • 对运行中过大的HRegion进行split;

  • 负责定期和阈值触发的Compact 操作,清理不需要的数据,控制HRegion的规模。

HRegion

  • HRegion是HBase中分布式存储和负载均衡的最小单元;

  • 不同的HRegion可以分别在不同的HRegionServer上,同一个HRegion不会拆分到多个server上;

  • HRegion按大小分隔,每个表一般是只有一个HRegion,当HRegion的某个列族达到一个阈值(默认256M)就会分成两个新的HRegion,HRegion被分配给哪个HRegionServer是完全动态透明的;

  • 每个HRegion由以下信息标识:< 表名,startRowkey,创建时间>,由目录表(-ROOT-和.META.)记录该HRegion的endRowkey 。

Store

  • 每个HRegion至少由一个Store组成;

  • HBase会把一起访问的数据放在一个Store里面,即每个ColumnFamily建一个Store;

  • 一个Store由一个memStore和若干StoreFile(也可为0)组成,HBase以Store的大小来判断是否需要切分HRegion。

MemStore

  • memStore 是放在内存里的,其保存修改的数据即Key-Values;

  • 当memStore的大小达到一个阀值(默认128MB)时,memStore会被flush到文件,即生成一个快照。

StoreFile

  • memStore内存中的数据写到文件后就是StoreFile,StoreFile底层是以HFile的格式保存在HDFS上;

  • StoreFile文件的数量增长到一定阈值后,系统会进行合并(minor/major compaction),在合并过程中会进行版本合并和删除工作,形成更大的StoreFile。

HFile

  • StoreFile对Hfile做了轻量级包装,StoreFile底层就是HFile;

  • HBase中Key-Value数据的存储格式,HFile是Hadoop的二进制格式文件。

HLog

  • HLog->WAL log-Write Ahead Log,数据的所有变更均会写入HLog,一旦HRegionServer 宕机,就可以从log中进行恢复;

  • HLog文件就是一个Hadoop Sequence File ,其中value是HBase的Key-Value对象,即对应HFile中的Key-Value,除此之外还记录了数据的归属信息,除了table和region名字外,还同时包括sequence number和写入时间timestamp。

HBase读写过程

  1. Client访问Zookeeper,获取.META.表信息(表存储在HRS上,此处Client会表的相关信息,并于下次使用,并且不会更新,只有当请求错误就会重新获取);

  2. 从.META.表查找,获取存放目标数据的Region信息,从而找到对应的RegionServer;

  3. 联系 RegionServer 定位到目标数据所在的Region,发出查询请求;

  4. 读请求先到MemStore中查数据,查不到就到BlockCache中查,命中即返回;

  5. 如果找不到,则在 Storefile 中扫描,并把读的结果放入BlockCache。