全面认识HBase架构(建议收藏)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: 全面认识HBase架构(建议收藏)

1.HBase架构组成


从物理结构上,HBase包含了三种类型的server,zookeeper、HMaster、region server,采用一种主从模式的结构。


21.jpg


  • region server主要用来服务读和写操作。当用户通过client访问数据时,client会和HBase RegionServer 进行直接通信。
  • HMaster主要进行region server的管理、DDL(创建、删除表)操作等。
  • Zookeeper是HDFS(Hadoop Distributed File System)的一部分,主要用来维持整个集群的存活,保障了HA,故障自动转移。


而底层的存储,还是依赖于HDFS的。


  • Hadoop的DataNode存储了Region Server所管理的数据,所有HBase的数据都是存在HDFS中的。
  • Hadoop的NameNode维护了所有物理数据块的metadata。


1.1 region server


HBase 的tables根据rowkey的范围进行水平切分,切分后分配到各个regions。一个region包含一个表在start key和end key所有行。region会被分配到集群中的各个region server,而用户都是跟region server进行读写交互。一个region一般建议大小在5-10G。


22.jpg


1.2 HBase HMaster


一般也叫作HMaster,HMaster主要职责包括两个方面:


  • 与region server的交互,对region server进行统一管理:
  • 启动时region的分配 崩溃后恢复的region重新分配 负载均衡的region重新分配
  • Admin相关功能:
  • 创建、删除、更新表结构等DDL操作


23.jpg


1.3 Zookeeper


HBase使用Zookeeper作为分布式协调服务,来维护集群内的server状态。


Zookeeper通过 heartbeat 维护了哪些server是存活并可用的,并提供server的故障通知。同时,使用一致性协议来保证各个分布式节点的一致性。


这里,需要特别关注,zookeeper负责来HMaster的选举工作,如果一个HMater节点宕机了,就会选择另一个HMaster节点进入active状态。


24.jpg


1.4 这些组件如何一起协调工作


Zookeeper用来共享分布式系统中成员的状态,它会和region server、HMaster(active)保持会话,通过heartbeat维持与这些ephemeral node(zk中的临时节点概念)的活跃会话。


下面,我们可以看到,zk在其中起到了最核心的作用。


25.jpg


多个HMaster会去竞争成为zookeeper上的临时节点,而zookeeper会将第一个创建成功的HMaster作为唯一当前active的HMaster,其他HMater进入stand by的状态。这个active的HMaster会不断发送heartbeat给zk,其他stand by状态的HMaster节点会监听这个active HMaster的故障信息。一旦发现active HMaster宕机了,就会重新竞争新的active HMaster。这就实现了HMaster的高可用。


每个region server会创建一个ephemeral node。HMaster会监视这些节点来确认哪些region server是可用的,哪些节点发生了故障宕机了。


如果一个region server或者active的HMaster 没有发送heatbeat给zk,那么和zk之间的会话将会过期,并且zk上会删掉这个临时节点,认为这个节点发生故障需要下线了。


其他监听者节点会收到这个故障节点被删除的消息。比如actvie的HMaster会监听region server的消息,如果发现某个region server下线了,那么就会重新分配region server来恢复相应的region数据。再比如,stand by的HMaster节点会监听active 的HMaster节点,一旦收到故障通知,就会竞争上线成为新的active HMaster。


1.5 第一次访问HBase


有一个特殊的HBase目录表,叫做META table,保存了集群中各个region的位置。zookeeper中保存了这个meta table 的位置信息。

当我们第一次访问HBase集群时,会做以下操作:


1)客户端从zk中获取保存meta table的位置信息,知道meta table保存在了哪个region server,并在客户端缓存这个位置信息;


2)client会查询这个保存meta table的特定的region server,查询meta table信息,在table中获取自己想要访问的row key所在的region在哪个region server上。


3)客户端直接访问目标region server,获取对应的row


26.jpg


进一步,我们了解一下meta table的存储结构。


  • Meta table保存了所有region信息的一张表
  • Meta table存储的数据形式类似一颗b树
  • 以keyvalue形式保存数据
  • Key: region的table name, start key等信息 Values: region server的相关信息


27.jpg


2.深入region server


一个region server运行在一个HDFS的data node上,并且拥有以下组件:

28.jpg


  • WAL:全称Write Ahead Log, 属于分布式系统上的文件。主要用来存储还未被持久化到磁盘的新数据。如果新数据还未持久化,节点发生宕机,那么就可以用WAL来恢复这些数据。
  • BlockCache:是一个读缓存。它存储了被高频访问的数据。当这个缓存满了后,会清除最近最少访问的数据。
  • MenStore: 是一个写缓存。它存储了还未被写入磁盘的数据。它会在写入磁盘前,对自身数据进行排序,从而保证数据的顺序写入。每个region的每个colum family会有一份对应的memstore。(没错,如果节点宕机了,存在这个缓存里的数据没有落盘,可以通过WAL保证这些数据不会丢失)
  • HFiles:按照字典序存储各个row的键值。


2.1 HBase写数据与region server的交互


整个写的过程更加复杂,而与region server的交互式最重要的一部分,这里只介绍跟region server的交互。


主要分为两个步骤,写WAL 和 写缓存。


“实际上,这里除了保证数据不丢,还跟提高写入效率有关,具体后续专门写一个相关文档进行展开说明”


1)写WAL


当客户端提交了一个put 请求,那么在region server上需要首先写WAL(write-ahead-log)。

需要注意三点

  • Hlog是一个region server上一个,并不是一个region一个
  • 写入数据是添加在log尾部
  • log上的数据主要为了保证没有落盘的数据能在server崩溃后不丢失


29.jpg


2)写缓存

数据写入WAL成功,才会继续写入MemStore。

然后才会返回ack给客户端,表示写入成功了。


30.jpg


2.2 HBase MemStroe


MemStore主要保存数据更新在内存中,以字典序的KeyValue形式,跟HFile里面保存的一样。


每一个column family会有一个对应的memstore


更新的数据会在memstore中以key-value形式排好序存储,注意看图,按字典序排,同时按version的倒序排列。


我们可以看到,key的组成包括rowkey-cf-col-version。


31.jpg


2.3 HBase region flush


当MemStore存储了足够多的数据,整个有序集会被写入一个新的HFile文件中,保存在HDFS。


HBase中每个colum family会有多个HFile,用来存储实际的keyValue。


注意,这里解释了为什么HBase中columfaily的数量是有限制的(具体是多少?)。


每一个cf有一个对应的MemStore,当一个MemStore满了,所属region的所有memstore都会被flush到磁盘。所以MemStore的flush的最小单位是一个region,而不是一个MemStore。


flush的同时,它还会存储一些额外的信息,比如最后一个写的序列号,让系统知道它当前持久化到什么位置了。


最大的序列号作为元数据,会被存储在每个HFile中,表示持久化到哪个位置了,下一次持久化应该从哪里继续。一个region启动时,会读取每个HFile的序列号,然后最大的序列号会被用来作为新的起始序列号。


32.jpg


3. 深入HFile


3.1 HFile的写入


HBase中,数据以有序KV的形式,存储在HFile中。当MemStore存储了足够的数据,全部kv对被写入HFile存入HDFS。


这里写文件的过程是顺序写,避免了硬盘大量移动磁头的过程,比随机写高效很多。

HFile的逻辑结构如图


33.jpg


主要分为四个部分:Scanned block section,Non-scanned block section,Opening-time data section和Trailer。


  • Scanned block section:表示扫描HFile时,这部分所有数据块都会被读取,包括Leaf Index Block和Bloom Block。
  • Non-scanned block section:表示在扫描HFile时不会被读取,主要包括Meta Block和Intermediate Level Data Index Blocks两部分。
  • Load-on-open-section:表示在HBase的region server启动时,会被加载到内存中。包括FileInfo、Bloom filter block、data block index和meta block index。
  • Trailer:表示HFile的基本信息、各个部分的偏移值和寻址信息。


文件中采用类似b+树都多层索引:


  • Kv对按递增顺序存储;
  • Root index指向非叶子结点
  • 每个数据块的最后一个key被放入中间索引(b+树的非叶子结点)
  • 每个数据块有自己的叶子索引(b+树的叶子结点)
  • 叶子索引通过row key指向64kb的kv数据块


35.jpg


文件的末尾有个trailer节点,指向了meta block。trailer节点还拥有其他信息,比如布隆过滤器和时间范围信息。


布隆过滤器帮助我们过滤那些不包含在这个HFilfe中的rowkey。


时间范围信息用来跳过那些不在这个HFilie时间范围内的row。


因此,当一个HFile被读取后,HFile的索引信息就会被缓存在BlockCache中,这样使得查询只需要一次磁盘查询操作,后续查找只需要读取blockcache内的索引信息即可。


343.jpg


region server上的实体结构关系如下:

regionserver : region = 1 : n,每个region server上有多个region。

region : store= 1 :n,每个region里面有多个store

store : memstore = 1 : 1。

Memstore:Hfile = 1:n。


相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
7月前
|
存储 负载均衡 分布式数据库
bigdata-27-HBase架构与概念
bigdata-27-HBase架构与概念
113 1
|
5月前
|
存储 分布式数据库 数据库
Hbase学习二:Hbase数据特点和架构特点
Hbase学习二:Hbase数据特点和架构特点
92 0
|
1月前
|
存储 缓存 监控
【赵渝强老师】HBase的体系架构
本文介绍了HBase的体系架构,包括HMaster、RegionServer和ZooKeeper的主要功能。HMaster负责Region的分配和管理,RegionServer处理数据的读写操作,ZooKeeper维护集群状态并协调分布式系统的运行。文章还详细解释了Region、WAL预写日志、Block Cache读缓存和MemStore写缓存的作用。
|
2月前
|
存储 监控 分布式数据库
百亿级存储架构: ElasticSearch+HBase 海量存储架构与实现
本文介绍了百亿级数据存储架构的设计与实现,重点探讨了ElasticSearch和HBase的结合使用。通过ElasticSearch实现快速检索,HBase实现海量数据存储,解决了大规模数据的高效存储与查询问题。文章详细讲解了数据统一接入、元数据管理、数据一致性及平台监控等关键模块的设计思路和技术细节,帮助读者理解和掌握构建高性能数据存储系统的方法。
百亿级存储架构: ElasticSearch+HBase 海量存储架构与实现
|
2月前
|
存储 分布式计算 Hadoop
Hadoop-33 HBase 初识简介 项目简介 整体架构 HMaster HRegionServer Region
Hadoop-33 HBase 初识简介 项目简介 整体架构 HMaster HRegionServer Region
65 2
|
6月前
|
存储 SQL 分布式计算
技术心得记录:深入学习HBase架构原理
技术心得记录:深入学习HBase架构原理
|
存储 分布式计算 监控
分布式数据库HBase的基本概念和架构之基本架构的Region Server
分布式数据库HBase是一个开源的分布式数据库系统,是Apache Hadoop生态系统的重要组成部分。
419 0
|
3月前
|
分布式计算 Java Hadoop
java使用hbase、hadoop报错举例
java使用hbase、hadoop报错举例
121 4
|
2月前
|
分布式计算 Hadoop Shell
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
85 4
|
2月前
|
SQL 分布式计算 Hadoop
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
39 3