在进行数据恢复前,必须停止HBase服务,避免恢复过程中产生新的数据写入,导致数据不一致。
执行以下命令停止HBase主节点和RegionServer:
sudo systemctl stop hbase-master
sudo systemctl stop hbase-regionserver
恢复数据的前提是有可用的备份,常见的备份方式包括:
tar或cp命令备份的/var/lib/hbase/data(HBase数据目录)和/var/log/hbase(日志目录);hbase backup命令创建的全量/增量备份(需提前配置备份策略)。若备份为HDFS快照,需将快照复制回HBase的HDFS存储路径:
# 1. 删除目标表的现有快照(若有)
hdfs dfs -deleteSnapshot /hbase/data/default/your_table_name your_snapshot_name
# 2. 将备份的快照复制到HBase数据目录
hdfs dfs -cp hdfs://namenode:8020/hbase/.hbase-snapshot/your_snapshot_name /hbase/data/default/your_table_name/.snapshot/
# 3. 在HBase Shell中恢复快照
hbase shell
restore_snapshot 'your_snapshot_name'
若备份为手动复制的data目录,需替换现有数据目录并修复权限:
# 1. 删除现有HBase数据目录(谨慎操作!)
sudo rm -rf /var/lib/hbase/data
# 2. 解压或复制备份的数据目录到原路径
sudo tar -xzvf /backup/path/hbase_data_backup.tar.gz -C /var/lib/
# 3. 修复目录权限(HBase用户通常为'hbase')
sudo chown -R hbase:hbase /var/lib/hbase
若使用hbase backup命令创建了备份,可通过以下命令恢复:
# 1. 查看备份列表,确认备份名称和路径
hbase backup list
# 2. 执行恢复操作(替换为实际备份名称和路径)
hbase backup restore 'your_backup_name' --backupRootDir=/path/to/backup/root --clusterId=your_cluster_id
恢复完成后,启动HBase服务并检查数据是否恢复成功:
# 1. 启动HBase服务
sudo systemctl start hbase-master
sudo systemctl start hbase-regionserver
# 2. 进入HBase Shell,检查表状态和数据
hbase shell
list # 查看表是否存在
scan 'your_table_name', {LIMIT => 10} # 扫描表数据(替换为实际表名)
若恢复失败,可通过以下步骤排查:
/var/log/hbase/目录下的hbase-*-master.log或hbase-*-regionserver.log,定位错误信息;hbase hbck -repair
hadoop fs -cp hdfs://namenode:8020/hbase/.logs/your_wal_file /var/lib/hbase/data/.logs/
hdfs dfs -ls检查HDFS快照是否存在);