如何备份恢复HDFS元数据-逻辑级备份?

Cloudera-Hadoop

1 基础知识

1.1 备份命令的简介

– 备份命令用于防止所有名称节点都不可用的情况下可还原名称节点数据
– “hdfs dfsadmin -fetchImage”命令支持不停机的情况下备份HDFS的名称节点元数据
– 该命令的本质是备份当前名称节点的“fsimage*”文件(一般存于“/data/dfs/nn/current/”目录)

1.2 备份命令的工作原理

– 该命令读取并导出当前名称节点的“fsimage”文件的内存提交
另外,需要注意的是,
– 如果Journal节点已启用并正在运行且存在编辑文件,则“fsimage”包含此编辑文件
– 如果Journal节点没有启用,则可能丢失过渡期间的任何传输数据

1.3 备份的还原条件

– 恢复需要确保恢复的名称节点与原始的名称节点主机名称相同(某种情况下可能需要IP相同)
– 该命令需要事先手动备份名称节点数据目录的“VERSION”文件(一般存于“/data/dfs/nn/current/”目录)
– 该命令还原数据需要手动复制“VERSION”和“fsimage”文件至名称节点的数据目录(一般存于“/data/dfs/nn/current/”目录)
注:“VERSION”文件只需备份一次(一般不会改变,文件包含重要的集群ID以及其他详细信息)

2 最佳实践

2.1 备份名称节点元数据

2.1.1 备份“VERSION”文件

cd /data/dfs/nn/current/
tar -cvf /backup/nn_backup_version.tar VERSION

注:备份目录请自行准备

2.1.2 备份“fsimage”文件

hdfs dfsadmin -fetchImage /backup

然后,你可以用如下命令确认备份的文件,

ls /backup

可见如下备份数据,

fsimage_0000000000000029782  nn_backup_version.tar

2.2 恢复名称节点元数据

2.2.1 删除HDFS的角色

删除以下角色,
– NameNode
– JournalNode
– Failover Controller
假设,我们清理如下角色数据,
– hd[03-05].cmdschool.org <—> HDFS JournalNode
– hd[01-02].cmdschool.org <—> HDFS NameNode HDFS Failover Controller
如果底层的数据与备份的不一致,建议你清理名称节点的目录,
In hd[01-02].cmdschool.org,

rm -rf /data/dfs/nn/

另外,如果恢复节点有第二名称节点目录,也需要清除,

rm -rf /data/dfs/snn/

2.2.2 恢复主节点和第二名称节点角色

– 恢复名称主节点角色(请不要启动,即恢复hd01.cmdschool.org的HDFS NameNode角色)
– 恢复第二名称节点角色(请不要启动,即恢复hd02.cmdschool.org的HDFS SecondaryNameNode角色)
– 确保新的名称节点主机名称(某种情况下可能需要IP相同)与原名称节点一致
– 新主机上部署名称节点角色(请不要启动角色)

2.2.3 创建名称节点的目录

mkdir -p /data/dfs/nn/current

2.2.4 恢复“VERSION”文件

cd /data/dfs/nn/current/
tar -xf /backup/nn_backup_version.tar

2.2.5 恢复fsimage文件

cd /data/dfs/nn/current/
cp /backup/fsimage* .

“fsimage”复制到当前目录后,你还需要生成该文件的md5校验文件,

md5sum `ls fsimage*` > `ls fsimage*`".md5"

2.2.6 修改数据目录的权限

chown hdfs:hadoop /data/dfs/nn
chown hdfs:hdfs -R /data/dfs/nn/current/
ls -l /data/dfs/nn/current/

文件显示如下,
total 116

-rw-r--r-- 1 hdfs hdfs 106959 Nov 22 22:38 fsimage_0000000000000030202
-rw-r--r-- 1 hdfs hdfs     62 Nov 22 22:41 fsimage_0000000000000030202.md5
-rw-r--r-- 1 hdfs hdfs    170 Nov 22 16:53 VERSION

2.2.7 手动启动节点角色

– 启动名称主节点角色
– 启动第二名称节点角色
– 启动所有数据节点

2.2.8 恢复HDFS集群的HA角色

– 由于不是本章重点,这里不再详述

参阅文档
===========
https://docs.cloudera.com/documentation/enterprise/5-10-x/topics/cm_mc_nn_metadata_backup.html

没有评论

发表评论

Bash
如何自动备份HDFS Name Node?

1 前言 之前的章节手动完成Hadoop HDFS的NameNode节点备份,本章重点是实现名称节点 …

Cloudera-Hadoop
如何备份恢复HDFS元数据-文件级备份?

1 基础知识 1.1 备份的目的 – 当两个名称节点(NameNode)角色都失败是,H …

Cloudera-Hadoop
如何修复Hadoop节点的逻辑坏道问题?

1 背景 生产环境的Spark应用程序被杀死,Java代码层报以下错误, Using Spark’s …