HDFS的回收站功能可將刪除的文件移動至用戶目錄下的.Trash/Current
文件夾(而非立即永久刪除),便于快速恢復。
core-site.xml
配置文件,添加以下參數并重啟HDFS集群:<property>
<name>fs.trash.interval</name>
<value>120</value> <!-- 回收站保留時間(分鐘),設為0則禁用 -->
</property>
<property>
<name>fs.trash.checkpoint.interval</name>
<value>120</value> <!-- 回收站檢查點間隔(分鐘) -->
</property>
/user/username/.Trash/Current/
路徑下,使用hdfs dfs -cp
命令復制回原路徑即可:hdfs dfs -cp /user/username/.Trash/Current/deleted_file /path/to/original/location
HDFS快照是文件系統在某一時刻的只讀副本,可快速還原到指定時間點的狀態。
hdfs dfsadmin -allowSnapshot /target_directory # 允許目標目錄創建快照
hdfs dfs -createSnapshot /target_directory snapshot_name # 創建快照(如snapshot_202510)
hdfs dfs -cp /target_directory/.snapshot/snapshot_name/deleted_file /path/to/restore
HDFS提供fsck
(文件系統檢查)和DistCp
(跨集群復制)工具,用于檢查和修復數據問題。
hdfs fsck
命令掃描文件系統,列出損壞的數據塊及其位置:hdfs fsck / -files -blocks -locations # 檢查根目錄下所有文件的塊狀態
fsck
發現損壞塊,可使用recoverLease
命令嘗試修復(需指定數據塊路徑):hdfs debug recoverLease /path/to/corrupt/block -retries 3 # 重試3次修復
DistCp
從其他集群或備份路徑復制數據:hadoop distcp hdfs://source-cluster:8020/source_path hdfs://target-cluster:8020/target_path # 跨集群復制
若上述方法均無效,可嘗試手動恢復元數據或數據塊(需謹慎操作,避免二次損壞)。
stop-dfs.sh # 停止HDFS服務
cp -r /path/to/secondarynamenode/data/* /path/to/namenode/data/ # 復制元數據
start-dfs.sh # 啟動HDFS服務
DistCp
或第三方工具備份的NameNode元數據、DataNode數據),可將備份數據復制到對應目錄并重啟集群。若HDFS原生工具無法滿足需求,可使用第三方工具(如extundelete
、testdisk
)恢復底層文件系統中的數據(需停止HDFS服務以避免數據覆蓋)。
sudo yum install extundelete # 安裝工具
sudo systemctl stop hadoop-hdfs-namenode hadoop-hdfs-datanode # 停止HDFS服務
sudo umount /path/to/hdfs/data # 卸載數據目錄
sudo extundelete /path/to/hdfs/data --restore-all # 恢復所有刪除文件
sudo mount /path/to/hdfs/data # 重新掛載目錄
sudo yum install testdisk # 安裝工具
sudo testdisk # 運行工具,按提示選擇分區、掃描并恢復數據