前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >NameNode Metadata备份和恢复最佳实践

NameNode Metadata备份和恢复最佳实践

作者头像
Fayson
发布2018-08-17 16:53:59
1.7K0
发布2018-08-17 16:53:59
举报
文章被收录于专栏:Hadoop实操Hadoop实操Hadoop实操

温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。

Fayson的github: https://github.com/fayson/cdhproject

提示:代码块部分可以左右滑动查看噢

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服务不能正常启动。

提示:代码块部分可以左右滑动查看噢

为天地立心,为生民立命,为往圣继绝学,为万世开太平。 温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-08-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档