温馨提示×

Linux下Hadoop的备份怎么做

小樊
43
2025-12-04 18:08:54
栏目: 智能运维

Linux下Hadoop备份实操指南

一 备份目标与总体策略

  • 明确范围:备份对象包括HDFS业务数据NameNode元数据Hive/其他组件元数据库、以及配置文件与环境
  • 策略组合:用HDFS副本机制纠删码(Erasure Coding)保障本地高可用,用快照实现目录级时间点回滚,用DistCp做跨集群/跨机房/云端定期全量或增量拷贝,形成“本地冗余 + 异地/云端备份”的多层方案。
  • 频率与保留:按业务RPO/RTO设定周期,常见做法是定期全量 + 更频繁增量,并定期校验与演练恢复

二 数据层备份与恢复

  • HDFS快照(目录级时间点回滚)
    • 开启与创建:
      hdfs dfsadmin -allowSnapshot /path/to/dir
      hdfs dfs -createSnapshot /path/to/dir snap_20251204
      
    • 查看与回滚:
      hdfs dfsadmin -listSnapshots /path/to/dir
      # 回滚:先删除损坏目录,再从快照拷贝回去
      hdfs dfs -rm -r /path/to/dir
      hdfs dfs -cp /path/to/dir/.snapshot/snap_20251204 /path/to/dir
      
    • 删除快照:
      hdfs dfs -deleteSnapshot /path/to/dir snap_20251204
      
  • DistCp(跨集群/异地/云端备份与迁移)
    • 基本全量:
      hadoop distcp -m 50 hdfs://src-nn:8020/path hdfs://backup-nn:8020/backup/20251204
      
    • 增量/差异:结合**-update/-diff-lastmod**时间或版本文件,仅复制变更。
    • 带宽与并发控制:用**-bandwidth限制带宽、-m控制并发、-i**忽略失败以继续任务。
  • 本地归档与拉取
    • 将HDFS目录拉取到本地归档:
      hdfs dfs -get /path/to/dir /local/backup/20251204
      
    • 将本地备份再上传到备份集群/对象存储:
      hdfs dfs -put /local/backup/20251204 hdfs://backup-nn:8020/backup/20251204
      
  • 回收站与快速回退
    • 误删后可从回收站恢复(依赖保留策略):
      hdfs dfs -ls /user/hadoop/.Trash/Current
      hdfs dfs -mv /user/hadoop/.Trash/Current/file /user/hadoop/file
      
  • 数据校验与修复
    • 检查缺失/损坏块并定位:
      hdfs fsck /path -files -blocks -locations
      
    • 租约/块恢复(在确认安全的情况下):
      hdfs debug recoverLease -path /path/to/file -retries 10
      

三 元数据与配置备份与恢复

  • NameNode元数据(FSImage/EditLog)
    • 备份步骤(HA与非HA均适用,操作前尽量进入安全模式并落盘):
      # 进入安全模式
      sudo -u hdfs hdfs dfsadmin -safemode enter
      # 落盘合并fsimage并重置edits
      sudo -u hdfs hdfs dfsadmin -saveNamespace
      # 备份元数据目录(路径以实际dfs.namenode.name.dir为准)
      sudo -u hdfs rsync -a /dfs/nn/current /backup/nn-$(date +%F)
      # 退出安全模式
      sudo -u hdfs hdfs dfsadmin -safemode leave
      
    • 恢复要点:将备份的current目录恢复到NameNode元数据目录,确保权限为hdfs:hdfs,必要时重启NameNode。
  • Hive Metastore等关系型元数据
    • 备份(示例为MariaDB/MySQL):
      mysqldump -uroot -p --databases metastore > metastore_$(date +%F).sql
      
    • 恢复:
      mysql -uroot -p < metastore_$(date +%F).sql
      
  • 配置文件与环境
    • 打包备份:
      tar czvf hdfs-config-$(date +%F).tar.gz /etc/hadoop/conf /usr/local/hadoop/etc/hadoop
      
    • 建议连同JDK版本、Hadoop版本、core-site.xml/hdfs-site.xml等一并归档,便于重建。

四 自动化与调度示例

  • 定时全量+增量DistCp脚本(示例保留最近7天)
    #!/usr/bin/env bash
    set -e
    BACKUP_ROOT="hdfs://backup-nn:8020/backup"
    SRC="/user/hadoop/data"
    DATE=$(date +%F)
    LAST=$(date -d '7 days ago' +%F)
    
    hdfs dfs -mkdir -p $BACKUP_ROOT/$DATE
    
    # 首次全量;后续可改为 -update/-diff + -lastmod/-compare
    hadoop distcp -m 50 -bandwidth 200 $SRC $BACKUP_ROOT/$DATE
    
    # 清理7天前备份
    hdfs dfs -rm -r -skipTrash $BACKUP_ROOT/$LAST
    
    # 可选:校验
    hdfs fsck $BACKUP_ROOT/$DATE -files -blocks -locations || echo "FS check completed with warnings"
    
    • 加入cron(每日02:00):
      0 2 * * * /opt/backup/backup_hdfs_distcp.sh >> /var/log/hdfs_backup.log 2>&1
      
  • 本地拉取归档脚本(小数据量或低频场景)
    #!/usr/bin/env bash
    set -e
    HDFS_SRC="/user/hadoop/data"
    LOCAL_DST="/backup/hdfs/$(date +%F)"
    mkdir -p $LOCAL_DST
    hdfs dfs -get $HDFS_SRC $LOCAL_DST
    tar czvf $LOCAL_DST.tar.gz -C $LOCAL_DST .
    

五 策略与注意事项

  • 多层防护:优先依赖HDFS副本/纠删码保障本地可用性,再用快照做目录级快速回滚,用DistCp跨集群/异地/云端备份,形成“本地冗余 + 异地/云端”的纵深防御。
  • 频率与保留:按业务变更频率设定全量/增量周期与保留策略,并定期做恢复演练完整性校验(如fsck、抽样下载校验)。
  • 变更窗口与一致性:在低峰期执行备份;对关键目录先allowSnapshot再操作;使用回收站降低误删风险。
  • 带宽与并发:DistCp使用**-bandwidth/-m控制对业务的影响;大数据量建议分批/分时段**执行。
  • 安全与合规:备份链路与存储需加密传输与落盘,访问权限最小化;对NameNode元数据数据库元信息的备份要单独演练恢复流程。

0