1. NameNode故障恢復
NameNode是HDFS的核心元數據管理節點,其故障恢復依賴高可用(HA)架構和元數據備份。通過配置Active/Standby NameNode對,Standby節點實時同步Active節點的元數據(通過JournalNode實現)。當Active節點宕機時,Standby節點自動切換為Active狀態,繼續提供服務。此外,需定期備份NameNode的元數據(fsimage和edits日志),以便在元數據損壞時恢復。
2. DataNode故障恢復
DataNode負責存儲實際數據塊,其故障恢復主要通過副本機制和自動重新分配實現。HDFS默認將每個數據塊復制到3個不同節點,當DataNode宕機時,NameNode會檢測到心跳超時(默認10分鐘),將該節點標記為“dead”,并自動將受影響的數據塊副本從其他健康節點重新分配到新的DataNode,確保副本數量符合配置要求。
3. 數據塊損壞恢復
數據塊損壞可能由硬件故障或傳輸錯誤導致,HDFS通過校驗和機制和副本修復解決。每個數據塊存儲時都會計算校驗和,讀取時進行比對,若發現損壞,NameNode會通知DataNode從其他健康副本讀取數據,重新寫入損壞的塊。同時,hdfs fsck命令可用于掃描并修復損壞的數據塊(如hdfs fsck /path/to/file -delete刪除壞塊)。
4. 誤刪文件恢復
HDFS提供回收站機制和快照功能防止誤刪。刪除文件時,默認將其移動到當前用戶的.Trash目錄(路徑為/user/username/.Trash),而非立即刪除。用戶可通過hdfs dfs -mv /user/username/.Trash/username/current/deleted_file /original/path命令恢復。此外,創建快照(hdfs dfsadmin -allowSnapshot /path)可保存目錄在某一時刻的只讀副本,誤刪后可從最新快照恢復。
5. 使用HDFS命令行工具恢復
HDFS提供fsck和DistCp等命令行工具輔助恢復。hdfs fsck用于檢查文件系統健康狀況(如hdfs fsck / -files -blocks -locations),并支持自動修復(-move將壞塊移動到/lost+found,-delete刪除壞塊);DistCp用于跨集群或本地復制數據,可將備份數據恢復到HDFS(如hdfs distcp hdfs://source-cluster:8020/source_path hdfs://target-cluster:8020/target_path)。
6. 快照恢復
快照是HDFS的關鍵恢復功能,支持創建文件系統或目錄的只讀時間點副本(hdfs dfsadmin -createSnapshot /path snapshot_name)。當數據丟失或損壞時,可通過hdfs dfs -cp /path/.snapshot/snapshot_name/original_file /target_path命令恢復到快照創建時的狀態??煺者m用于頻繁修改的重要數據目錄(如日志、數據庫文件)。
7. 數據備份與恢復
定期備份是應對大規模數據丟失的有效手段。常用方法包括:數據塊復制(HDFS默認的3副本機制)、DistCp跨集群復制(hdfs distcp實現全量/增量備份)、快照備份(保存關鍵目錄的歷史版本)。備份策略需根據數據重要性調整(如核心業務數據每日備份,非核心數據每周備份)。