本文面向HBase运维人员,从基础原理出发,重点讲解数据完整性及元数据逆向恢复机制,为后续系列文章奠定基础。
HBase目录结构(1.x版本)
HBase在HDFS上的根目录通常为/hbase,关键子目录包括:data(存储表数据和region信息)、WALs(写入日志)、oldWALs(已持久化的WAL)、archive(归档文件)、corrupt(损坏文件)、MasterProcWALs(Master过程日志)、hbase.id和hbase.version(集群标识与版本)等。其中,表数据目录下包含tableinfo(表属性)、regioninfo(region边界与状态)、HFile数据文件、recovered.edits(恢复日志)及临时目录(.tmp、.splits、.merges)。
主要文件与数据完整性
HFile:数据文件,存储实际记录,通过firstkey/lastkey用于元数据重建。
Reference文件:split/merge时引用父HFile,无效引用需手动清理。
regioninfo:记录region的startkey/endkey、状态等。
tableinfo:保存表名、列族属性及自定义配置。
hbase:meta表:记录所有region的分配信息,是集群路由核心。
元数据逆向生成原理
当元数据丢失或损坏时,可依据数据文件反向恢复:
tableinfo:优先从Master缓存恢复,否则仅能恢复表名和列族名,其他属性恢复默认值。
regioninfo:扫描HFile的firstkey/lastkey,按排序确定region边界,重新生成regioninfo。
meta表:根据regioninfo序列化填充meta行,并标记默认Server,待region上线时重新分配。
还需处理region空洞(补充缺失region)和重叠(合并重叠region)问题。
修复工具
hbck(在线):依次执行-fixTableOrphans、-fixHdfsOrphans、-fixHdfsOverlaps、-fixHdfsHoles、-fixMeta、-fixAssignment,逐步修复tableinfo、regioninfo、region范围、meta表并触发重新上线。
OfflineMetaRepair(离线):直接重建meta表,适合集群无法启动场景。
使用工具前务必先执行hdfs fsck检查数据完整性。若涉及第三方组件写入元数据,需额外备份自定义属性,修复后手动核对。后续文章将继续深入HBase运维实践。