在 Linux 环境下对 Hadoop 进行备份,通常分为 HDFS 数据备份、元数据(NameNode)备份 和 配置文件备份 三类。下面按常见场景给你一个实用指南。
distcp(最常用)适合集群间或同集群不同目录备份。
hadoop distcp hdfs://namenode1:8020/user/data hdfs://namenode2:8020/backup/data
同集群备份示例:
hadoop distcp /user/data /backup/data
✅ 优点:
hdfs dfs -copyToLocal适合小规模数据备份到本地或 NFS。
hdfs dfs -copyToLocal /user/data /data/backup/
恢复:
hdfs dfs -copyFromLocal /data/backup/data /user/data
⚠️ 不适合 TB 级数据
适合防误删。
hdfs dfsadmin -allowSnapshot /user/data
hdfs dfs -createSnapshot /user/data snapshot_20260121
查看:
hdfs dfs -ls /user/data/.snapshot
删除快照:
hdfs dfs -deleteSnapshot /user/data snapshot_20260121
dfs.namenode.name.dir通常在:
$HADOOP_HOME/data/dfs/name
备份方式:
cp -r $HADOOP_HOME/data/dfs/name /backup/namenode_name_$(date +%F)
⚠️ 必须在 SafeMode 或停止 NameNode 时备份最安全
进入安全模式:
hdfs dfsadmin -safemode enter
# 备份
hdfs dfsadmin -safemode leave
确保:
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>/data/dfs/namesecondary</value>
</property>
定期检查点会自动备份 fsimage。
非常重要但常被忽略。
cp -r $HADOOP_HOME/etc/hadoop /backup/hadoop_etc_$(date +%F)
建议备份:
0 2 * * * /usr/bin/hdfs dfsadmin -safemode enter && \
cp -r /data/dfs/name /backup/name_$(date +\%F) && \
/usr/bin/hdfs dfsadmin -safemode leave
distcpstop namenode
cp -r /backup/name_20260121/* $HADOOP_HOME/data/dfs/name/
hdfs namenode -format(仅极端情况)
start namenode
如果你能告诉我:
我可以给你 定制化备份脚本。