温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。
Fayson的github:
提示:代码块部分可以左右滑动查看噢
1.文档编写目的
对于未启用HA的NameNode集群,fsimage和edits将存储在活动的NameNode和SecondNameNode上,建议定期备份fsimage和edits。
对于启用HA的NameNode集群,由于fsimage和edits通常存储在两个NameNode服务器上,并且edits也会存储在Journal Quorum(通常为3个服务器),因此一般建议只关注定期备份fsimage。
本篇文章Fayson主要介绍如何备份NameNode Metadata数据以及恢复。
- 本次Fayson的测试环境为
1.CM和CDH版本为5.15
2.Redhat7.4
2.NameNode Metadata备份
1.备份fsimage数据,(该操作适用HA和非HA的NameNode),使用如下命令进行备份:
[root@cdh01 disk1]# mkdir nn_metadata_back
[root@cdh01 disk1]# hdfs dfsadmin -fetchImage nn_metadata_back/
[root@cdh01 disk1]# ll nn_metadata_back
(可左右滑动)
注意:不要直接使用http://<nn_hosts>:50070/imagetransfer?getimage=1&txid=latest这是一个内部的API接口,如果接口改变需要做相应的修改,并且只能针对活动的NameNode使用。
2.备份edits数据(该操作适用非HA的NameNode),使用如下命令备份:
[root@cdh01 current]# sudo -u hdfs hdfs dfsadmin -rollEdits
(可左右滑动)
注意:需要使用hdfs用户执行,该操作将结束当前edits日志并启动一个新的。
3.拷贝edits日志到备份目录(该操作适用非HA的NameNode),使用如下命令进行备份
在CM上找到NameNode的dfs.name.dir配置目录
将/data/disk1/dfs/nn/current目录下的edits_0*开头的文件拷贝至备份目录
[root@cdh01 disk1]# mkdir nn_metadata_back/edits
[root@cdh01 disk1]# cp /data/disk1/dfs/nn/current/edits_0* nn_metadata_back/edits/
[root@cdh01 disk1]#
(可左右滑动)
4.备份VERSION文件(该操作适用于HA和非HA的NameNode),这个文件不需要定期备份,因为它不会更改,但该文件非常重要,因为文件中包含了clusterID一级其它详细信息
[root@cdh01 disk1]# cp /data/disk1/dfs/nn/current/VERSION nn_metadata_back/
[root@cdh01 disk1]# ll nn_metadata_back/
(可左右滑动)
3.NameNode Metadata恢复
在前面我们备份的NameNode Metadata数据,如果我们的NameNode服务器突然大宕机无法恢复,这个时候需要用一个新的服务器来还原NameNode服务,如下是常规的还原过程:
在Fayson的测试环境下,cdh01.fayson.com为NameNode节点,用来模拟设该节点故障,需要通过备份数据来恢复NameNode服务。
1.通过CM将新服务器添加到集群中(将之前故障节点从集群从删除,添加hostname和IP与故障节点一致的服务器到集群)
2.通过CM为新加的节点添加NameNode角色
3.检查NameNode的dfs.name.dir配置的目录在服务器上是否存在,如果不存在则需要手动的创建并确保目录属主为hdfs:hdfs,且父目录权限为700
[root@cdh01 ~]# mkdir -p /data/disk1/dfs/nn/
[root@cdh01 ~]# chown hdfs:hadoop /data/disk1/dfs/nn
[root@cdh01 ~]# chmod 700 /data/disk1/dfs/nn
(可左右滑动)
4.将VERSION和最后备份的fsimage文件复制到/data/disk1/dfs/nn/current目录下
[root@cdh01 dfs]# mkdir -p /data/disk1/dfs/nn/current
[root@cdh01 dfs]# cp /data/disk1/nn_metadata_back/VERSION /data/disk1/dfs/nn/current/
[root@cdh01 dfs]# cp /data/disk1/nn_metadata_back/fsimage_0000000000004483704 /data/disk1/dfs/nn/current/
[root@cdh01 dfs]# cp /data/disk1/nn_metadata_back/edits/* /data/disk1/dfs/nn/current/
[root@cdh01 dfs]# chown -R hdfs:hdfs /data/disk1/dfs/nn/current/
(可左右滑动)
注意:因为Fayson的集群NameNode为启用HA,所以将备份的edits数据也拷贝到/data/disk1/dfs/nn/current目录下,如果你的集群启用了HA则可以不用考虑edits数据的恢复。
5.为fsimage文件创建md5校验
[root@cdh01 dfs]# cd nn/current/
[root@cdh01 current]# md5sum fsimage_0000000000004483704 > fsimage_0000000000004483704.md5
[root@cdh01 current]# ll fsimage_0000000000004483704*
(可左右滑动)
6.完成以上步骤后,启动NameNode服务
查看50070端口,HDFS数据已恢复
注意:上述的恢复的过程,替换的主机名与IP和之前故障的服务器一致,如果主机名与新添加的服务器不同,在HA的集群中还需要重新初始化Zookeeper znode以进行故障自动转移,Fayson前面的文章《如何修改启用了高可用HDFS的NameService ID》有介绍
4.总结
1.NameNode Metadata的备份要考虑是否启用HA,如果没有启用HA的NameNode则需要额外的备份edits,启用HA的NameNode则可以不用备份。
2.恢复NameNode Metadata数据到新的服务器上,需要注意新节点与故障节点的hostname是否一致,如果不一致在HA的NameNode集群中需要额外的操作重新初始化Zookeeper znode以进行故障自动转移。
3.恢复数据时需要注意数据目录及文件的权限和属主问题,否则可能会导致NameNode服务不能正常启动。
提示:代码块部分可以左右滑动查看噢
为天地立心,为生民立命,为往圣继绝学,为万世开太平。
温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。
推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。
原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操