1. 首页 > Hadoop教程 > 正文

大数据教程FG013-HDFS快照与备份恢复实战

内容简介:本文详细介绍HDFS快照与备份恢复实战,包括快照原理、快照创建与管理、数据备份策略、数据恢复操作等核心内容。风哥教程参考Hadoop官方文档HDFS Snapshots、HDFS Backup等内容。

目录大纲

Part01-基础概念与理论知识
  1.1 HDFS快照原理
  1.2 快照应用场景
  1.3 备份恢复策略
Part02-生产环境规划与建议
  2.1 快照策略规划
  2.2 备份存储规划
  2.3 恢复演练规划
Part03-生产环境项目实施方案
  3.1 快照功能启用与配置
  3.2 快照创建与管理
  3.3 数据备份实施
  3.4 数据恢复操作
Part04-生产案例与实战讲解
  4.1 误删除数据恢复案例
  4.2 数据版本回退案例
  4.3 跨集群备份恢复案例
Part05-风哥经验总结与分享
  5.1 快照管理最佳实践
  5.2 备份恢复经验总结

Part01-基础概念与理论知识

1.1 HDFS快照原理

HDFS快照是文件系统的只读时间点副本,记录了某一时刻文件系统的状态。更多视频教程www.fgedu.net.cn 快照采用写时复制(Copy-on-Write)技术,创建快照时不立即复制数据,只有在数据被修改时才复制。

风哥提示:HDFS快照创建速度极快,因为只记录元数据变化,不复制实际数据。只有在数据被修改时才会产生额外存储开销。

1.2 快照应用场景

HDFS快照适用于多种数据保护场景。学习交流加群风哥微信: itpux-com

快照典型应用场景:
– 数据误删除恢复
– 数据误修改回退
– 定期数据备份
– 数据版本管理
– 数据迁移前保护

1.3 备份恢复策略

完整的备份恢复策略应包括快照、远程备份、离线备份等多种方式。from bigdata视频:www.itpux.com

备份策略层次:
– 快照:快速恢复,适合误操作恢复
– 远程备份:异地容灾,适合灾难恢复
– 离线备份:长期保存,适合合规要求

Part02-生产环境规划与建议

2.1 快照策略规划

快照策略需要根据业务需求制定。更多学习教程公众号风哥教程itpux_com

快照策略建议:
– 关键数据目录:每日创建快照,保留7天
– 重要业务数据:每周创建快照,保留4周
– 历史数据目录:每月创建快照,保留12月
– 临时数据目录:不创建快照

2.2 备份存储规划

备份存储需要考虑容量、性能和成本。学习交流加群风哥QQ113257174

# 查看当前存储使用情况
hdfs dfs -du -h /bigdata/warehouse/fgedu

# 存储使用统计
50.0 G 150.0 G /bigdata/warehouse/fgedu/ods
30.0 G 90.0 G /bigdata/warehouse/fgedu/dwd
20.0 G 60.0 G /bigdata/warehouse/fgedu/dws
10.0 G 30.0 G /bigdata/warehouse/fgedu/ads
110.0 G 330.0 G /bigdata/warehouse/fgedu

2.3 恢复演练规划

定期进行恢复演练是保证备份有效性的关键。风哥提示:建议每季度进行一次恢复演练。

# 查看快照目录列表
hdfs lsSnapshottableDir

# 可快照目录
drwxr-xr-x – hdfs hdfs 0 2024-01-16 10:00 /bigdata/warehouse/fgedu
drwxr-xr-x – hdfs hdfs 0 2024-01-16 10:00 /bigdata/warehouse/fgedu_logs

Part03-生产环境项目实施方案

3.1 快照功能启用与配置

3.1.1 启用目录快照功能

# 启用快照功能
hdfs dfsadmin -allowSnapshot /bigdata/warehouse/fgedu
# 查看快照配额
hdfs dfsadmin -snapshotDiff /bigdata/warehouse/fgedu

# 启用成功
Allowing snaphot on /bigdata/warehouse/fgedu succeeded

# 快照配额信息
Snapshot quota: 65536
Snapshot count: 0

3.1.2 配置快照保留策略

# 查看快照相关配置
hdfs getconf -confKey dfs.namenode.snapshot.capture.openfiles

# 快照配置
true

3.2 快照创建与管理

3.2.1 创建快照

# 创建快照(使用默认名称)
hdfs dfs -createSnapshot /bigdata/warehouse/fgedu
# 创建命名快照
hdfs dfs -createSnapshot /bigdata/warehouse/fgedu daily_backup_20240116
# 查看快照列表
hdfs dfs -ls /bigdata/warehouse/fgedu/.snapshot/

# 快照创建成功
Created snapshot /bigdata/warehouse/fgedu/.snapshot/s20240116-100000.000

# 命名快照创建成功
Created snapshot /bigdata/warehouse/fgedu/.snapshot/daily_backup_20240116

# 快照列表
Found 2 items
drwxr-xr-x – hdfs hdfs 0 2024-01-16 10:00 /bigdata/warehouse/fgedu/.snapshot/s20240116-100000.000
drwxr-xr-x – hdfs hdfs 0 2024-01-16 10:00 /bigdata/warehouse/fgedu/.snapshot/daily_backup_20240116

3.2.2 查看快照差异

# 修改数据后查看差异
hdfs dfs -mkdir /bigdata/warehouse/fgedu/test_dir
hdfs dfs -put /bigdata/local_data/test.txt /bigdata/warehouse/fgedu/test_dir/
# 查看快照差异
hdfs dfs -snapshotDiff /bigdata/warehouse/fgedu daily_backup_20240116

# 快照差异报告
Difference between snapshot daily_backup_20240116 and current directory:
M ./
+ ./test_dir
+ ./test_dir/test.txt

3.2.3 删除快照

# 删除指定快照
hdfs dfs -deleteSnapshot /bigdata/warehouse/fgedu s20240116-100000.000
# 验证删除结果
hdfs dfs -ls /bigdata/warehouse/fgedu/.snapshot/

# 快照删除成功
Deleted snapshot /bigdata/warehouse/fgedu/.snapshot/s20240116-100000.000

# 剩余快照
Found 1 items
drwxr-xr-x – hdfs hdfs 0 2024-01-16 10:00 /bigdata/warehouse/fgedu/.snapshot/daily_backup_20240116

3.3 数据备份实施

3.3.1 快照自动备份脚本

#!/bin/bash
# snapshot_backup.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn

DATE=$(date +%Y%m%d_%H%M%S)
SNAP_NAME=”daily_${DATE}”
DIRS=”/bigdata/warehouse/fgedu /bigdata/warehouse/fgedu_logs”

for dir in ${DIRS}; do
echo “Creating snapshot for ${dir}”
hdfs dfs -createSnapshot ${dir} ${SNAP_NAME}
if [ $? -eq 0 ]; then
echo “Snapshot ${SNAP_NAME} created successfully”
else
echo “Failed to create snapshot for ${dir}”
fi
done

# 清理过期快照(保留最近7天)
hdfs dfs -ls /bigdata/warehouse/fgedu/.snapshot/ | awk ‘{print $NF}’ | head -n -7 | while read snap; do
hdfs dfs -deleteSnapshot /bigdata/warehouse/fgedu $(basename ${snap})
done

# 执行快照备份
./snapshot_backup.sh
Creating snapshot for /bigdata/warehouse/fgedu
Created snapshot /bigdata/warehouse/fgedu/.snapshot/daily_20240116_100500
Snapshot daily_20240116_100500 created successfully
Creating snapshot for /bigdata/warehouse/fgedu_logs
Created snapshot /bigdata/warehouse/fgedu_logs/.snapshot/daily_20240116_100500
Snapshot daily_20240116_100500 created successfully

3.3.2 跨集群数据备份

# 使用distcp进行跨集群备份
hadoop distcp -update -skipcrccheck \
hdfs://fgedu01.net.cn:8020/bigdata/warehouse/fgedu \
hdfs://backup-cluster.net.cn:8020/backup/fgedu_$(date +%Y%m%d)

# 跨集群备份进度
24/01/16 10:10:00 INFO tools.DistCp: Number of paths: 100
24/01/16 10:10:05 INFO tools.DistCp: Number of files to copy: 5000
24/01/16 10:10:10 INFO tools.DistCp: Total bytes to copy: 107374182400
24/01/16 10:30:00 INFO tools.DistCp: Copy completed: 5000 files, 100GB

3.4 数据恢复操作

3.4.1 从快照恢复单个文件

# 模拟误删除
hdfs dfs -rm /bigdata/warehouse/fgedu/ods/user_info.parquet
# 从快照恢复
hdfs dfs -cp /bigdata/warehouse/fgedu/.snapshot/daily_backup_20240116/ods/user_info.parquet /bigdata/warehouse/fgedu/ods/
# 验证恢复结果
hdfs dfs -ls /bigdata/warehouse/fgedu/ods/user_info.parquet

# 文件删除
Deleted /bigdata/warehouse/fgedu/ods/user_info.parquet

# 从快照恢复成功
# 验证文件存在
-rw-r–r– 3 fgedu fgedu 536870912 2024-01-16 10:15 /bigdata/warehouse/fgedu/ods/user_info.parquet

3.4.2 从快照恢复整个目录

# 模拟目录误删除
hdfs dfs -rm -r /bigdata/warehouse/fgedu/dwd
# 从快照恢复目录
hdfs dfs -cp /bigdata/warehouse/fgedu/.snapshot/daily_backup_20240116/dwd /bigdata/warehouse/fgedu/
# 验证恢复结果
hdfs dfs -ls /bigdata/warehouse/fgedu/dwd

# 目录删除
Deleted /bigdata/warehouse/fgedu/dwd

# 从快照恢复成功
# 验证目录内容
Found 10 items
-rw-r–r– 3 fgedu fgedu 107374182 2024-01-16 10:20 /bigdata/warehouse/fgedu/dwd/order_detail.parquet
-rw-r–r– 3 fgedu fgedu 53687091 2024-01-16 10:20 /bigdata/warehouse/fgedu/dwd/user_detail.parquet

Part04-生产案例与实战讲解

4.1 误删除数据恢复案例

数据误删除是生产环境最常见的故障。更多视频教程www.fgedu.net.cn 以下是完整的误删除恢复案例。

# 场景:误删除重要业务数据
# 1. 确认删除的文件
hdfs dfs -ls /bigdata/warehouse/fgedu/ods/ | grep “deleted”
# 2. 查看可用快照
hdfs dfs -ls /bigdata/warehouse/fgedu/.snapshot/
# 3. 从最近的快照恢复
hdfs dfs -cp /bigdata/warehouse/fgedu/.snapshot/daily_20240116_100500/ods/important_data.parquet /bigdata/warehouse/fgedu/ods/

# 确认删除的文件
# 文件不存在

# 可用快照列表
Found 3 items
drwxr-xr-x – hdfs hdfs 0 2024-01-15 10:00 /bigdata/warehouse/fgedu/.snapshot/daily_20240115_100000
drwxr-xr-x – hdfs hdfs 0 2024-01-16 10:00 /bigdata/warehouse/fgedu/.snapshot/daily_20240116_100000
drwxr-xr-x – hdfs hdfs 0 2024-01-16 10:05 /bigdata/warehouse/fgedu/.snapshot/daily_20240116_100500

# 恢复成功
# 验证文件
-rw-r–r– 3 fgedu fgedu 1073741824 2024-01-16 10:25 /bigdata/warehouse/fgedu/ods/important_data.parquet

4.2 数据版本回退案例

数据版本回退用于处理数据被错误修改的情况。学习交流加群风哥微信: itpux-com

# 场景:数据被错误修改,需要回退到之前版本
# 1. 查看当前数据
hdfs dfs -cat /bigdata/warehouse/fgedu/config/app_config.json
# 2. 查看快照中的数据
hdfs dfs -cat /bigdata/warehouse/fgedu/.snapshot/daily_20240115_100000/config/app_config.json
# 3. 回退数据
hdfs dfs -cp -f /bigdata/warehouse/fgedu/.snapshot/daily_20240115_100000/config/app_config.json /bigdata/warehouse/fgedu/config/

# 当前数据(错误)
{“version”:”2.0″,”setting”:”wrong_value”}

# 快照数据(正确)
{“version”:”1.0″,”setting”:”correct_value”}

# 回退成功
# 验证回退结果
hdfs dfs -cat /bigdata/warehouse/fgedu/config/app_config.json
{“version”:”1.0″,”setting”:”correct_value”}

4.3 跨集群备份恢复案例

4.3.1 异地备份实施

# 配置异地备份脚本
#!/bin/bash
# cross_cluster_backup.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn

DATE=$(date +%Y%m%d)
SRC_CLUSTER=”hdfs://fgedu01.net.cn:8020″
DST_CLUSTER=”hdfs://backup-cluster.net.cn:8020″

# 执行增量备份
hadoop distcp -update -skipcrccheck -bandwidth 100 \
${SRC_CLUSTER}/bigdata/warehouse/fgedu \
${DST_CLUSTER}/backup/fgedu/${DATE}

# 验证备份完整性
hdfs dfs -ls ${DST_CLUSTER}/backup/fgedu/${DATE} | wc -l

# 备份执行
24/01/16 11:00:00 INFO tools.DistCp: Starting incremental backup
24/01/16 11:00:05 INFO tools.DistCp: Source: hdfs://fgedu01.net.cn:8020/bigdata/warehouse/fgedu
24/01/16 11:00:10 INFO tools.DistCp: Destination: hdfs://backup-cluster.net.cn:8020/backup/fgedu/20240116
24/01/16 11:30:00 INFO tools.DistCp: Backup completed: 5000 files, 100GB

# 验证结果
5000

4.3.2 从异地备份恢复

# 从异地备份恢复数据
hadoop distcp -update \
hdfs://backup-cluster.net.cn:8020/backup/fgedu/20240116 \
hdfs://fgedu01.net.cn:8020/bigdata/warehouse/fgedu_restored
# 验证恢复数据
hdfs dfs -ls /bigdata/warehouse/fgedu_restored/

# 恢复执行
24/01/16 12:00:00 INFO tools.DistCp: Starting restore from backup
24/01/16 12:30:00 INFO tools.DistCp: Restore completed: 5000 files

# 验证恢复结果
Found 4 items
drwxr-xr-x – fgedu fgedu 0 2024-01-16 12:30 /bigdata/warehouse/fgedu_restored/ods
drwxr-xr-x – fgedu fgedu 0 2024-01-16 12:30 /bigdata/warehouse/fgedu_restored/dwd
drwxr-xr-x – fgedu fgedu 0 2024-01-16 12:30 /bigdata/warehouse/fgedu_restored/dws
drwxr-xr-x – fgedu fgedu 0 2024-01-16 12:30 /bigdata/warehouse/fgedu_restored/ads

Part05-风哥经验总结与分享

5.1 快照管理最佳实践

在实际生产环境中,快照管理需要注意以下几点:from bigdata视频:www.itpux.com

风哥经验总结:
1. 关键目录必须启用快照功能
2. 制定合理的快照保留策略
3. 定期清理过期快照,避免占用过多空间
4. 快照名称要有意义,便于识别
5. 重要操作前创建快照

5.2 备份恢复经验总结

5.2.1 备份策略建议

风哥提示:备份策略应该多层次、多维度,确保数据安全。

# 综合备份策略脚本
#!/bin/bash
# comprehensive_backup.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn

DATE=$(date +%Y%m%d)

# 1. 创建快照
hdfs dfs -createSnapshot /bigdata/warehouse/fgedu daily_${DATE}

# 2. 导出元数据
hdfs dfsadmin -metasave meta_${DATE}.txt

# 3. 跨集群备份
hadoop distcp -update /bigdata/warehouse/fgedu hdfs://backup-cluster/backup/fgedu/${DATE}

# 4. 记录备份日志
echo “${DATE}: Backup completed successfully” >> /bigdata/logs/backup.log

# 备份执行成功
Created snapshot /bigdata/warehouse/fgedu/.snapshot/daily_20240116
Meta data saved to meta_20240116.txt
DistCp completed: 5000 files, 100GB
20240116: Backup completed successfully

5.2.2 恢复演练清单

恢复演练检查清单:
– 确认快照可用性
– 验证快照数据完整性
– 测试单文件恢复
– 测试目录恢复
– 测试跨集群恢复
– 记录恢复时间

# 恢复演练脚本
#!/bin/bash
# recovery_drill.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn

echo “=== HDFS Recovery Drill ===”
echo “Date: $(date)”

# 测试快照恢复
START_TIME=$(date +%s)
hdfs dfs -cp /bigdata/warehouse/fgedu/.snapshot/daily_20240116/ods/test.parquet /bigdata/warehouse/fgedu/ods/test_restored.parquet
END_TIME=$(date +%s)
echo “Snapshot recovery time: $((END_TIME-START_TIME)) seconds”

# 验证数据一致性
ORIG_SIZE=$(hdfs dfs -du /bigdata/warehouse/fgedu/.snapshot/daily_20240116/ods/test.parquet | awk ‘{print $1}’)
REST_SIZE=$(hdfs dfs -du /bigdata/warehouse/fgedu/ods/test_restored.parquet | awk ‘{print $1}’)

if [ “${ORIG_SIZE}” -eq “${REST_SIZE}” ]; then
echo “Data integrity check: PASSED”
else
echo “Data integrity check: FAILED”
fi

# 恢复演练输出
=== HDFS Recovery Drill ===
Date: Mon Jan 16 12:30:00 CST 2024
Snapshot recovery time: 5 seconds
Data integrity check: PASSED

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息