在CentOS系统中,HDFS数据恢复需根据数据丢失场景(误删除、节点故障、磁盘损坏等)选择合适方法。以下是常用且有效的恢复步骤,按优先级排序(从易到难):
前提条件:需提前启用HDFS回收站功能(默认未开启)。
配置步骤:修改core-site.xml文件(通常位于/etc/hadoop/conf/),添加以下配置并重启HDFS服务:
<property>
<name>fs.trash.interval</name>
<value>120</value> <!-- 回收站保留时间(分钟),设为0则禁用 -->
</property>
<property>
<name>fs.trash.checkpoint.interval</name>
<value>60</value> <!-- 回收站检查点间隔(分钟),建议小于fs.trash.interval -->
</property>
恢复操作:
.Trash/Current目录(如/user/root/.Trash/Current)。hdfs dfs命令将文件从回收站复制回原路径:hdfs dfs -cp /user/username/.Trash/Current/deleted_file /target/restore/path
注意:回收站中的文件会在fs.trash.interval时间后自动永久删除,需及时恢复。
前提条件:需提前对目标目录启用快照功能(快照是目录的只读副本,不影响当前数据)。
创建快照步骤:
hdfs fs -allowSnapshot /target_directory
snapshot_20250922):hdfs fs -createSnapshot /target_directory snapshot_20250922
恢复操作:
hdfs fs -cp /target_directory/.snapshot/snapshot_20250922/deleted_file /target/restore/path
优势:快照创建速度快(几乎无性能影响),且能保留目录的历史版本,适合频繁修改的重要数据目录。
① fsck命令(检查与修复文件系统)
hdfs fsck /target_directory -delete # -delete参数可删除损坏的块(谨慎使用)
-list-corruptfileblocks参数:hdfs fsck /target_directory -list-corruptfileblocks
② DistCp命令(跨集群复制恢复)
hadoop distcp hdfs://backup-cluster:8020/source_path hdfs://current-cluster:8020/target_path
注意:fsck适合修复元数据问题(如块丢失但数据仍存在),DistCp适合从备份集群恢复完整目录。
① 元数据恢复(NameNode数据恢复)
sudo systemctl stop hadoop-namenode
sudo systemctl stop hadoop-datanode
fsimage文件(位于$HADOOP_HOME/data/namenode/current/目录):
fsimage_xxx文件到当前目录,覆盖原有文件。sudo systemctl start hadoop-namenode
sudo systemctl start hadoop-datanode
② 物理数据恢复(磁盘损坏场景)
extundelete工具恢复ext3/ext4文件系统中的数据(需卸载HDFS数据目录):sudo yum install extundelete -y
sudo umount /path/to/hdfs/data # 卸载数据分区
sudo extundelete /dev/sdXn --restore-all # 替换为实际设备名(如/dev/sda1)
sudo mount /path/to/hdfs/data # 重新挂载
testdisk工具(支持多种文件系统):sudo yum install testdisk -y
sudo testdisk # 按向导选择分区、扫描并恢复文件
警告:手动恢复风险极高,可能导致数据进一步损坏,需在测试环境验证后再操作,且需停止HDFS服务。
DistCp或第三方备份工具(如Apache Falcon、Qubole)将HDFS数据备份到异地存储(如S3、HBase)。hadoop distcp hdfs://backup-cluster:8020/backup_path hdfs://current-cluster:8020/target_path
关键提醒:备份是数据安全的最后防线,建议开启HDFS快照+定期DistCp备份的组合策略。
hdfs用户或具有sudo权限的用户)。hdfs dfsadmin -report监控DataNode状态,确保数据块复制正常。