HBase元数据和文件结构


发布于 2024-12-17 / 48 阅读 / 0 评论 /
HBase在Zookeeper和HDFS上的数据说明

1.HBase ZKNode

HBase依赖Zookeeper进行元数据管理,相关配置如下:

<property>
    <name>hbase.zookeeper.quorum</name>
    <value>127.0.0.1</value>
</property>
<property>
    <name>hbase.zookeeper.property.clientPort</name>
    <value>2181</value>
</property>
<property>
    <name>zookeeper.znode.parent</name>
    <value>/hbase</value>
</property>

在/hbase这个父parent zknode下,保存hbase所需的各种元数据zknode。

1.1.meta-region-server

存储HBase集群hbase:meta元数据表所在的RegionServer访问地址。客户端读写数据首先会从此节点读取hbase:meta元数据的访问地址,将部分元数据加载到本地,根据元数据进行数据路由。

1.2.master/backup-masters

通常来说生产环境要求所有组件节点都避免单点服务,HBase使用Zookeeper地相关特性实现了HMaster的高可用功能。其中HMaster节点是集群汇总堆外服务的管理服务器,backup-masters下的的子节点是集群中的备份节点,一旦对外服务的主HMaster节点发生异常,备HMaster可以通过选举切换为主HMaster,继续对外提供服务。备HMaster可以是1个,也可以是多个。

1.3.table

保存集群中所有表信息

1.4.region-in-transition

当前HBase系统是现在红,迁移Region是一个非常复杂的过程。首先对Region执行unassign操作,将此Region从open状态变为offline状态。然后在目标RegionServer上执行assign操作,将此Region从offline状态变成open状态。这个过程需要在Master上记录此Region的各个状态。目前RegionServer将这些状态通知给Master是通过Zookeeper来实现的,RegionServer会在region-in-transition中变更Region的状态,Master监听Zookeeper对应的zknode,以便在Region状态发生变更之后立马获得通知,得到通知后,Master再去更新Region在hbase:meta中的状态和内存中的状态。

1.5.table-lock

HBase系统使用Zookeeper相关机制实现分布式锁。HBase中一张表的数据会以Region的形式存在于多个RegionServer上,因此对一张表的DDL操作通常是典型的分布式操作。每次执行DDL操作之前都需要先获取相应的表锁,防止多个DDL操作之间出现冲突,这个表锁就是分布式锁。

1.6.online-snapshot

用来实现在线snapshot操作。表级别在线snapshot同样是一个分布式操作,需要对目标表的每个Region都执行snapshot,全部成功之后才能返回成功。Master作为控制节点给各个相关RegionServer下达snapshot命令,对应的RegionServer对目标Region执行snapshot,成功之后通知Master。Master下达snapshot名了,RegionServer反馈snapshot结果都是通过Zookeeper完成的。

1.7.replication

用来实现HBase复制功能

1.8.splitWAL/recovering-regions

用来实现HBase分布式故障恢复。为了加速集群故障恢复,HBase实现了分布式故障恢复,让集群中所有RegionServer都参与未回放日志切分。Zookeeper是Master和RegionServer之间的协调节点。

1.9.rs

保存集群中所有运行中的RegionServer信息。

2.HBase在HDFS中的文件

HBase的文件都存放在HDFS上。

2.1.hbase-snapshot

snapshot文件存储目录。用户执行snapshot后,相关的snapshot元数据文件存储在该目录。

2.2.tmp

临时目录文件,主要用于HBase表的创建和删除操作。表创建的时候首先会在tmp目录下执行,执行成功后再将tmp目录下的表信息移动到实际表目录下。表删除操作会将表目录移动到tmp目录下,一定时间过后再将tmp目录下的文件真正删除。

2.3.MasterProcWALs

存储Master Procedure过程中的WAL文件。Master Procedure功能主要用于可恢复的分布式DDL操作。在早期的HBase版本中,分布式DDL操作一旦在执行到中间某个状态发生宕机等异常的情况时是没有办法回滚的,这会导致集群元数据不一致。Master Procedure功能使用WAL记录DDL执行的中间状态,在异常发生之后可以通过WAL回放明确定位到中间状态点,继续执行后续操作以保证整个DDL操作的完整性。

2.4.WALs

存储集群中所有RegionServer的HLog日志文件。

2.5.archive

文件归档目录,这个目录在以下三个场景中会被用到:

(1)所有对HFIle文件的删除操作都会将待删除的文件临时放在该目录。

(2)进行Snapshot或者升级时使用到的归档目录

(3)Compaction删除HFile的时候,也会把旧的HFile移动到这里。

2.6.corrupt

存储损坏的HLog文件或者HFile文件。

2.7.data

存储集群中所有Region的HFile数据。HFile的完整路径包括命名空间、表名称、Region名称、列簇名称、HFile文件名。

除了HFile文件外,data目录还保存了一些重要的子目录和子文件。

2.7.1.tabledesc

表描述文件,记录对应表的基本schema信息

2.7.2.tmp

表临时目录,主要用来存储flush和compaction过程中的中间结果。以flush为例,MemStore中的KV数据落盘形成的HFile首先会生成在.tmp目录下,一旦落盘完成,再从.tmp目录移动到对应的实际文件目录。

2.7.3.regioninfo

Region描述文件

2.7.4.recovered.edits

存储故障恢复时该Region需要回放的WAL日志数据。RegionServer宕机后,该节点上还没有来得及flush到磁盘的数据需要通过WAL回放恢复,WAL文件首先需要按照Region进行切分,每个Region拥有对应的WAL数据片段,回放时只需要回放自己的WAL数据片段即可。

2.8.hbase.id

集群启动初始化的时候,创建的集群唯一ID

2.9.hbase.version

HBase软件版本文件

2.10.oldWALs

WAL归档目录。一旦一个WAL文件中记录的所有KV数据确认已经从MemStore持久化到HFile,那么该WAL文件就会被移到该目录。