单可用区故障可能导致 HDFS 数据丢失及服务中断。本方案通过 OSS 跨可用区存储实现定期冷备,以便在故障发生时迅速启动新的集群并恢复数据,从而保障业务的连续性。
方案架构
核心逻辑在于利用阿里云对象存储OSS作为高可用的冷备数据中心,定期将生产EMR集群的数据及元数据备份至OSS。在发生灾难时,可在新的可用区启动一个EMR集群,并从OSS中拉取备份数据进行恢复。
架构说明:
生产EMR集群:位于可用区A,承载线上业务的读写,定期将数据及元数据备份至OSS。
备份EMR集群:位于可用区B,当生产EMR集群发生故障时,快速创建实例并从OSS恢复数据,以确保业务的连续性。
对象存储OSS:作为灾备存储介质。
核心流程
步骤一:准备备份环境
创建OSS Bucket
登录OSS控制台,在左侧导航栏进入Bucket列表页面,单击创建Bucket。
配置以下关键参数,其余保留默认值:
Bucket名称:输入一个全局唯一的名称,例如
backup-hdfs-bucket
。地域:选择EMR集群所在地域。
存储冗余类型:选择同城冗余存储。
单击完成创建。
配置 OSS 的 AccessKey
在Hadoop的
core-site.xml
文件中,添加访问OSS所需的配置。<configuration> <property> <name>fs.oss.accessKeyId</name> <value>YourAccessKeyId</value> </property> <property> <name>fs.oss.accessKeySecret</name> <value>YourAccessKeySecret</value> </property> <property> <name>fs.oss.endpoint</name> <!-- 阿里云ECS环境下推荐使用内网OSS Endpoint,即oss-cn-xxx-internal.aliyuncs.com --> <value>oss-cn-xxx.aliyuncs.com</value> </property> </configuration>
配置完成后,在集群节点上执行命令,确认可以正常访问OSS Bucket。
hadoop fs -ls oss://your-bucket-name/
步骤二:数据与元数据备份
数据备份
# 定义变量 BACKUP_DIR="/data" BUCKET="oss://${your-bucket-name}/data" # 执行DistCp命令 hadoop distcp -update -m 20 $BACKUP_DIR $BUCKET
参数说明:
BACKUP_DIR
:EMR集群需要备份的目录。BUCKET
:步骤一种创建的OSS Bucket。-update
:仅复制源路径中不存在或发生变化的文件,适用于增量备份场景。-m 20
:指定DistCp使用的Map任务并发度为20,需根据集群规模和网络带宽调整。
关于使用distcp的参考,请参见Hadoop社区文档。或者,您也可以使用DataWorks的数据同步功能,请参见使用DistCp任务实现大规模文件迁移。
元数据备份
NameNode元数据:元数据通常位于NameNode节点的本地磁盘,默认路径为
/mnt/disk1/hdfs/name/current
。JournalNode元数据(HA模式):在高可用(HA)模式下,还需备份JournalNode集群的数据,默认路径为
/mnt/disk1/hdfs/journal
。
使用
distcp
或ossutil
工具,将上述目录定期完整复制到OSS的独立路径下。说明元数据备份的核心作用在于:当生产环境EMR集群所在可用区恢复后,若集群仍因元数据损坏无法正常运作,可通过元数据备份实现快速替换以恢复业务。需特别说明的是,备份EMR集群的数据恢复过程会自动重建元数据,禁止使用备份元数据以避免数据不一致风险。
步骤三:故障恢复
在生产可用区发生故障后,请按照以下步骤在备用可用区恢复EMR集群。
准备新集群
在另一健康可用区,使用集群克隆或者容灾计划等功能创建新的EMR集群,并确保满足必要的节点资源和存储空间。恢复数据
在新集群上执行DistCp
命令,将数据从OSS Bucket拉取回新的EMR集群。# 定义变量 OSS_BUCKET="oss://your-bucket-name/data" NEW_HDFS_DIR="/path/to/your/data" # 执行DistCp恢复命令 hadoop distcp -update -m 20 ${OSS_BUCKET} ${NEW_HDFS_DIR}
新集群验证
切换集群地址:将上游数据生产应用和下游数据消费应用的配置指向新的EMR集群地址。
数据验证:对关键业务流程进行测试,以验证新集群数据的完整性和有效性。
切换集群:在全面验证新集群的功能和性能后,即可正式进行切换至新集群。
实施建议
备份策略
根据数据重要性分级,采用不同备份频率。例如,对于关键业务数据,建议实施每日全量备份+每小时增量备份。
结合数据生命周期管理,优化老旧数据的备份频率。
性能调优
使用压缩传输减少网络带宽消耗。
调整MapReduce任务配置,以优化备份恢复的性能。
合理配置distcp的并发度(-m参数),以平衡网络带宽与负载。