HDFS回收站是內置的輕量級恢復功能,可將刪除的文件移動到用戶目錄下的.Trash
文件夾,保留一定時間(默認1天)。
core-site.xml
配置文件,添加以下參數(單位:分鐘,設為0則禁用回收站):<property>
<name>fs.trash.interval</name>
<value>120</value> <!-- 保留120分鐘 -->
</property>
<property>
<name>fs.trash.checkpoint.interval</name>
<value>60</value> <!-- 每60分鐘創建檢查點 -->
</property>
重啟HDFS服務使配置生效:systemctl restart hadoop-hdfs-namenode hadoop-hdfs-datanode
。Current
目錄恢復至原路徑或指定路徑:hdfs dfs -cp /user/username/.Trash/Current/deleted_file /path/to/restore
若需恢復整個目錄,替換deleted_file
為目錄名即可。快照是HDFS的只讀時間點副本,創建后不影響數據寫入,恢復時直接復制快照中的文件,效率高且安全。
hdfs dfs -allowSnapshot /test # 允許/test目錄創建快照
hdfs dfs -put test.txt /test # 向目錄中添加文件
hdfs fs -createSnapshot /test import_data # 創建名為import_data的快照
hdfs dfs -cp /test/.snapshot/import_data/test.txt /path/to/restore
快照創建后,即使原數據被覆蓋或刪除,仍可通過快照恢復。若回收站、快照均不可用(如元數據損壞、數據塊丟失),需通過手動操作恢復,步驟較復雜,需謹慎執行。
systemctl stop hadoop-hdfs-namenode hadoop-hdfs-datanode
/var/lib/hadoop-hdfs/cache/hdfs/dfs/name
)。將備份的元數據復制到新NameNode的數據目錄,再啟動服務即可。hdfs fsck
命令檢查丟失的塊,并從其他DataNode復制:hdfs fsck / -files -blocks -locations # 查看丟失的塊及位置
hdfs dfsadmin -recoverLease /path/to/file # 恢復租約(解決“租約超時”問題)
若自動復制失敗,可使用hdfs balancer
命令手動觸發數據塊均衡。hdfs fsck / -files -blocks -locations # 檢查根目錄下的所有文件、塊及位置
hdfs fsck /path/to/corrupted_dir -delete # 刪除損壞的文件(謹慎使用)
hadoop distcp hdfs://backup-cluster:8020/path/to/backup hdfs://current-cluster:8020/path/to/restore
適用于大規模數據恢復,支持并行傳輸。若上述方法無法恢復,可使用第三方工具(如R-Studio、MinIO),但需注意:
wget https://download.r-studio.org/r-studio-server-rhel-2023.09.1-462-x86_64.rpm
sudo yum install -y r-studio-server-rhel-2023.09.1-462-x86_64.rpm
systemctl start rstudio-server
登錄R-Studio Web界面,創建恢復任務并選擇HDFS分區掃描。hdfs dfsadmin -saveNamespace
)和DataNode數據;啟用快照功能保護重要目錄;設置監控告警(如DataNode宕機、塊丟失)。hdfs fsck
)。