在進行數據恢復前,必須停止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檢查)。/var/log/hbase/目錄下的日志文件(如hbase-master.log、hbase-regionserver.log)定位問題。