Ubuntu系统下HDFS数据恢复需根据数据丢失场景选择合适方式,以下是常见且有效的恢复步骤:
HDFS回收站是默认开启的轻量级恢复机制,可将删除的文件临时存储在用户目录下的.Trash文件夹中,便于快速恢复。
core-site.xml中已配置回收站参数(若未配置,需重启集群生效):<property>
<name>fs.trash.interval</name>
<value>120</value> <!-- 回收站保留时间(分钟),设为0则禁用 -->
</property>
<property>
<name>fs.trash.checkpoint.interval</name>
<value>60</value> <!-- 回收站检查点间隔(分钟) -->
</property>
hdfs dfs -ls /user/your_username/.Trash/Currenthdfs dfs -cp /user/your_username/.Trash/Current/deleted_file /path/to/restore快照是HDFS的只读时间点副本,适合重要目录的定期备份,恢复速度快且不影响集群运行。
hdfs dfsadmin -allowSnapshot /target_directory # 允许目录创建快照
hdfs dfs -createSnapshot /target_directory snapshot_name # 创建快照
hdfs dfs -cp /target_directory/.snapshot/snapshot_name/deleted_file /path/to/restore
HDFS提供fsck(文件系统检查)和DistCp(跨集群复制)工具,可修复损坏的数据块或恢复丢失的副本。
hdfs fsck / -files -blocks -locations # 检查集群数据完整性
hdfs fsck /path/to/corrupted_file -move # 将损坏的文件移动到/lost+found目录
hdfs dfs -setReplication /path/to/file 3 # 将文件复制因子设置为3
或使用DistCp从其他集群复制数据:hadoop distcp hdfs://source-cluster:8020/path/to/source hdfs://target-cluster:8020/path/to/destination
定期备份是应对严重数据丢失的关键,可通过备份文件还原整个NameNode或DataNode的数据。
stop-dfs.sh/backup/namenode/data)复制到原数据目录(如/var/lib/hadoop-hdfs/data):cp -r /backup/namenode/data/* /var/lib/hadoop-hdfs/data/
start-dfs.shhdfs fsck获取丢失块的位置),或从备份中还原。若上述方法均无效,可使用第三方工具扫描HDFS底层存储(如HDFS的HDFS文件系统层),尝试恢复未被覆盖的数据。常用工具包括:
hdfs dfsadmin -saveNamespace)和重要目录的快照,避免依赖单一恢复方式。