NameNode Metadata备份和恢复最佳实践

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

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

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

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

原文发布于微信公众号 - Hadoop实操(gh_c4c535955d0f)

原文发表时间:2018-08-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏维C果糖

详述 IntelliJ IDEA 中自动生成 serialVersionUID 的方法

当我们用 IntelliJ IDEA 编写类并实现 Serializable(序列化)接口的时候,可能会遇到这样一个问题,那就是: 无法自动生成serialVe...

338100
来自专栏Hadoop实操

如何在CDH集群外配置非Kerberos环境的Gateway节点

22140
来自专栏云计算教程系列

在腾讯云CVM上搭建Hadoop集群

本教程将介绍如何在腾讯云CVM上搭建Hadoop集群。Hadoop中是一个Apache的框架,可以让你通过基本的编程处理跨服务器集群的分布式方式的大型数据集。H...

33540
来自专栏猿人谷

hadoop 1.x环境搭建

近一直在自学Hadoop,今天花点时间搭建一个开发环境,并整理成文。 首先要了解一下Hadoop的运行模式: 单机模式(standalone)       ...

217100
来自专栏Jed的技术阶梯

Spark性能调优01-资源调优

在开发完Spark作业之后,就该为作业配置合适的资源了。 Spark的资源参数,基本都可以在spark-submit命令中作为参数设置。

14420
来自专栏chokwin的专栏

如何安装和设置3节点Hadoop集群

Hadoop是一个开源Apache项目,允许在大型数据集上创建并行处理应用程序,分布在网络节点上。它由处理节点间数据可扩展性和冗余的Hadoop分布式文件系统(...

30340
来自专栏伦少的博客

spark-submit提交Spark Streamming+Kafka程序

36650
来自专栏简单聊聊Spark

Mapreduce实现原理总结

一.首先,我们从客户端,JobTracker,TaskTracker这个层面来分析整个mapreduce过程

26710
来自专栏LuckQI

Java大数据学习~Hadoop初识二读取与写入流程

15550
来自专栏喵了个咪的博客空间

[喵咪大数据]Hadoop单机模式

千里之行始于足下,学习大数据我们首先就要先接触Hadoop,上节介绍到Hadoop分为Hadoop-HDFS,Hadoop-YARN,Hadoop-Mapred...

34460

扫码关注云+社区

领取腾讯云代金券