在进行数据恢复前,必须停止HBase服务以避免新数据写入导致数据不一致。可通过以下命令停止HBase主节点和RegionServer服务:
sudo systemctl stop hbase-master
sudo systemctl stop hbase-regionserver
# 或使用传统脚本(若未使用systemd)
# stop-hbase.sh
数据恢复的前提是有可用的备份,常见备份方式包括HDFS快照(推荐)和手动备份:
tar命令备份了HBase数据目录(默认/var/lib/hbase/data),需将备份文件解压到临时目录:sudo tar -xzvf hbase_data_backup.tar.gz -C /tmp/hbase_restore # 解压到临时目录
若恢复的是全量数据,建议清空当前HBase数据目录(避免旧数据与新数据冲突):
sudo rm -rf /var/lib/hbase/data/* # 清空HBase数据目录
根据备份类型选择对应恢复方式:
hdfs dfs -cp /hbase/.hbase-snapshot/YourSnapshotName/* /var/lib/hbase/data/
sudo cp -r /tmp/hbase_restore/* /var/lib/hbase/data/
启动HBase服务后,通过HBase Shell验证数据是否恢复成功:
# 启动HBase服务
sudo systemctl start hbase-master
sudo systemctl start hbase-regionserver
# 进入HBase Shell
hbase shell
# 列出所有表
list
# 扫描目标表数据(替换为实际表名)
scan 'your_table_name', {LIMIT => 10} # 限制返回10条数据以快速验证
若数据丢失发生在最近一次快照之后,可通过WAL(Write Ahead Log)日志恢复增量数据:
# 找到对应的WAL日志文件(位于HDFS的/hbase/WALs目录下)
hdfs dfs -ls /hbase/WALs/
# 使用ImportTsv工具导入WAL日志(需转换为TSV格式)
hbase org.apache.hadoop.hbase.tools.ImportTsv \
-Dimporttsv.columns="HBASE_ROW_KEY,family:qualifier" \
-Dimporttsv.separator="\t" \
-Dimporttsv.skip.bad.lines=true \
your_table_name /path/to/wal_file.log
hdfs dfs -ls /path/to/backup检查)。ImportTsv)与HBase版本匹配,避免因版本差异导致恢复失败。/var/log/hbase/目录下的日志文件(如hbase-master.log、hbase-regionserver.log)定位问题。