确认故障类型
需先明确数据丢失或不可用的根本原因,常见场景包括:HMaster/RegionServer宕机、HFile数据文件损坏、WAL(Write-Ahead Log)日志缺失、配置文件(如hbase-site.xml)错误等。这一步直接影响后续恢复方法的选择。
备份现有数据
恢复操作前,务必对当前HBase数据目录(默认/hbase/data)进行完整备份,防止误操作导致二次数据丢失:
cp -r /hbase/data /hbase/data_backup
收集故障信息
查看HBase日志文件(位于/hbase/logs目录),获取具体报错信息,辅助定位问题:
tail -f /hbase/logs/hbase-username-master-hostname.log # Master节点日志
tail -f /hbase/logs/hbase-username-regionserver-hostname.log # RegionServer节点日志
zkServer.sh status检查),然后重启HMaster进程:stop-hbase.sh # 停止集群
start-hbase.sh # 启动集群(自动重启HMaster)
stop-hbase.sh
start-hbase.sh
使用HBase自带的hbck工具检查和修复数据一致性:
/hbase/bin/hbck -repair
该工具会自动扫描Region一致性、HFile损坏等问题,并尝试修复。
若WAL日志损坏导致数据丢失,可尝试从备份中恢复:
/hbase/data/hbase/.logs/目录);hadoop fs -get hdfs://namenode:9000/hbase/data/hbase/.logs/WALs/my_WAL_file /path/to/hbase/data/hbase/.logs/
检查hbase-site.xml中的关键配置项(如hbase.rootdir、zookeeper.znode.parent),修正错误后重启集群:
stop-hbase.sh
start-hbase.sh
HBase的快照功能可快速恢复表到某一历史状态,操作步骤如下:
hbase(main):001:0> create_snapshot 'your_table_name', 'snapshot_name'
stop-hbase.sh
hadoop fs -get hdfs://namenode:9000/hbase/.snapshot/snapshot_name /path/to/hbase/data
start-hbase.sh
hbase(main):001:0> restore_snapshot 'snapshot_name'
hbase(main):001:0> scan 'your_table_name'
若数据未写入HFile(如RegionServer崩溃前未刷盘),可通过WAL日志重放操作:
hbase org.apache.hadoop.hbase.wal.WALManager -files -logs
若已使用HBase自带的backup命令创建了全量/增量备份,可通过以下步骤恢复:
hbase backup create full /path/to/backup
hbase backup create incremental /path/to/backup
hbase backup restore /path/to/backup
恢复时需指定备份ID或路径,确保目标表已存在。hadoop fs -ls查看备份目录是否存在所需文件)。disable 'your_table_name'),避免数据冲突。