0661-6.2.0-Hadoop数据备份与恢复

本文详细介绍了在Hadoop集群中如何备份和恢复NameNode元数据、MariaDB元数据库、HDFS数据以及利用HDFS和HBase快照功能。通过实际操作演示了备份过程、故障模拟及恢复步骤,确保在面临数据丢失或损坏时能迅速恢复服务。
摘要由CSDN通过智能技术生成

1 文档编写目的

在Hadoop集群中,数据文件是以Block的方式存储在HDFS上,而HDFS上数据的名称,副本存储的地址等都是通过NameNode上的元数据来保存的。Hive的数据库和表的数据也是保存在HDFS中,而Hive的元数据metastore则保存在关系型数据库中。这些文件和数据如果丢失或者损坏,都会导致相应的服务不可用,Hadoop集群可以启用某些组件和服务的高可用或者备份,来应对可能出现数据损坏问题。但是在集群需要迁移,集群需要扩容或者缩容,或者其他情况,集群可能会面对数据安全风险的时候,我们可以通过主动备份这些数据,来保证数据安全。本文主要讲述如何备份NameNode元数据,如何备份MariaDB元数据库,如何备份HDFS中的数据,以及如何从这些备份中恢复。

  • 测试环境

1.RedHat7.2

2.CDH6.2.0

3.使用root进行操作

2 NameNode元数据

1.NameNode元数据备份

备份元数据之前,我们首先要确保元数据同步到集群最新的状态。

这里我们先进入安全模式,安全模式下会禁止HDFS的写操作。这样可以避免在保存元数据的时候,HDFS上进行数据的写操作,导致数据不一致的情况出现。

进入安全模式
[root@cdh01 ~]# sudo -u hdfs hdfs dfsadmin -safemode enter
保存最新的fsimage到磁盘并且重置edits
[root@cdh01 ~]# sudo -u hdfs hdfs dfsadmin -saveNamespace
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
我们把更新后的NameNode元数据信息复制到磁盘的其他位置,任意选择一个NameNode里面的文件复制就可以,这里新建一个目录nnbak,把数据复制到这里来

[root@cdh01 ~]# cp -r /dfs/nn/* ./nnbak/
  • 1

在这里插入图片描述
现在我们已经备份成功。

2.NameNode元数据恢复

在恢复NameNode元数据之前,我们先来模拟NameNode故障的情况。

前面进入了安全模式,我们先退出安全模式。然后删除掉两个NameNode节点上的元数据,测试集群配置的目录地址都为/dfs/nn

退出安全模式

[root@cdh01 nnbak]# sudo -u hdfs hdfs dfsadmin -safemode leave
  • 1

在这里插入图片描述

然后删除两个节点上的NameNode元数据。这里用移动到其他目录来代替。

[root@cdh01 nn]# mv ./current/ bak/
[root@cdh01 nn]# mv in_use.lock  bak/
[root@cdh02 nn]# mv current/ in_use.lock bak/
  • 1
  • 2
  • 3

在这里插入图片描述

在这里插入图片描述

现在重启HDFS,是启动失败的。导致集群也不能正常运行。如下图
在这里插入图片描述
我们现在进行集群恢复,把刚才保存到目录nnbak里面的文件复制回去。

[root@cdh01 nnbak]# mv ./* /dfs/nn
  • 1

在这里插入图片描述
把文件拷贝回去后,由于前面用cp命令复制了备份文件,导致属主改变成root了,现在还原所有文件的属组为hdfs,启动cdh01上的NameNode成功

[root@cdh01 nn]# chown hdfs:hdfs -R current/
  • 1

在这里插入图片描述
在cdh02节点也同样移动cdh01的数据回/dfs/nn目录下,然后启动NameNode成功

在这里插入图片描述
接下来再点击启动集群按钮,把其他受影响的服务也都启动起来
在这里插入图片描述

集群启动成功。
在这里插入图片描述

简单查看一下HDFS,命令执行成功,验证完成

[root@cdh01 ~]# hadoop fs -ls /
  • 1

在这里插入图片描述

3 MariaDB元数据

1.MariaDB元数据备份

在我的环境下,Hive的元数据是存储在MariaDB中的,在备份之前,我们先测试一下Hive的使用情况,以便跟后面恢复后的状况做对比。

hive> show databases;
hive> use student;
hive> show tables;
hive> select * from student_info;
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

现在开始备份数据库,首先停止集群和CMS服务
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

停止成功

现在在安装数据库的节点上备份MariaDB上相关的数据库

[root@cdh01 dump]# mysqldump -uroot -p123456 --databases am cm hue metastore nav_as nav_ms oozie rm sentry > dump.sql
  • 1

在这里插入图片描述
2. MariaDB元数据恢复

删除导出的这些数据库

在这里插入图片描述

然后导入刚才dump出来的数据

[root@cdh01 dump]# mysql -uroot -p123456 < dump.sql
  • 1

在这里插入图片描述

导入后,去MariaDB查看一下数据库是否恢复,下图中可以看到刚才删除的数据库又都导入回来了

在这里插入图片描述

然后再启动CMS服务和集群。
在这里插入图片描述
CMS启动成功
在这里插入图片描述

启动集群
在这里插入图片描述
集群启动成功
在这里插入图片描述

再在命令行验证一下,Hive,Impala是否使用正常。

hive> show databases;
hive> use student;
hive> show tables;
hive> select * from student_info;
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

跟在恢复前的数据一样,Hive验证成功。

现在验证Impala,同样查看这个表,看数据是否一样

用impala-shell登陆Impala shell命令行,执行下面的命令

[root@cdh01 ~]# impala-shell
 default> show databases;
 default> use student;
 student> show tables;
 student> select * from student_info;
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

可以看到,查询的数据也一致,验证成功。

4 HDFS数据

4.1 HDFS快照的使用

HDFS中可以对目录创建Snapshot,创建之后不管后续目录发生什么变化,都可以通过快照找回原来的文件和目录结构,下面来介绍如何使用HDFS快照。

1.启用快照功能

从CM进入HDFS页面,点击文件浏览器,进入下图的界面
在这里插入图片描述
这里为/testdd这个目录启用快照,先进入testdd这个目录,再点击右边启用快照

在这里插入图片描述

点击之后会让你选择启用快照的路径,然后点击启用快照,启用成功

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

启用成功。

2.创建快照

创建前,先查看文件的内容

[root@cdh01 ~]# hadoop fs -cat /testdd/a.txt
  • 1

在这里插入图片描述

然后创建快照,点击拍摄快照,输入快照名称,开始创建。
在这里插入图片描述

在这里插入图片描述

创建完成
在这里插入图片描述

在这里插入图片描述

这里,我们对文件a.txt进行更新,然后再创建一个快照shot2,一会好对比

[root@cdh01 ~]# hadoop fs -appendToFile b.txt /testdd/a.txt
  • 1

在这里插入图片描述

a.txt内容已经更新。再次创建一个快照shot2
在这里插入图片描述

在这里插入图片描述

3.恢复快照

要测试快照恢复功能,我们先把启用快照的目录下的文件全部删除

[root@cdh01 ~]# hadoop fs -rm /testdd/*
  • 1

在这里插入图片描述
可以看到文件已经被删除了,我们现在来恢复第一个快照shot1

如图,选择从快照还原目录
在这里插入图片描述
选择第一个快照shot1,点击还原。

在这里插入图片描述

在这里插入图片描述

还原成功后,在浏览器窗口也可以看到文件也恢复了。
在这里插入图片描述
从命令行查看一下文件内容。跟之前一样,恢复成功

[root@cdh01 ~]# hadoop fs -cat /testdd/a.txt
  • 1

在这里插入图片描述

现在,我们再次删除/testdd/a.txt这个文件,然后恢复第二个快照shot2,验证也成功

[root@cdh01 ~]# hadoop fs -rm /testdd/* 
  • 1

在这里插入图片描述

在这里插入图片描述
还原成功

在这里插入图片描述

查看文件信息,跟之前的信息一致,验证完成。恢复成功。
在这里插入图片描述

4.2 HBase快照的使用

  1. 创建快照

同样的,从CM进入HBase界面,点击表浏览器,就可以看到当前HBase中的表

在这里插入图片描述

查看一下test1表的数据scan ‘test1’
在这里插入图片描述

创建快照shot1

在这里插入图片描述

在这里插入图片描述

创建快照成功

在这里插入图片描述
2. 恢复快照

在恢复快照之前,先对表的数据进行修改,这里,我们删除一条数据

hbase(main):028:0> delete 'test1','row2','info:name'
hbase(main):030:0> scan 'test1'
  • 1
  • 2

在这里插入图片描述

删除成功后,可以看到只剩下了row1的数据,现在再从CM恢复快照

在这里插入图片描述

在这里插入图片描述
恢复完成后,查看test1表的数据
在这里插入图片描述
可以看到数据恢复成功。验证完成

4.3 BDR备份数据

BDR是Backup and Disaster Recovery,备份和灾难恢复。

CM提供了很多功能来进行备份,这里我们使用BDR来测试。

在测试之前,需要先配置连接好另外的集群来备份数据。

在CM主页点击备份,下拉菜单中点击同行。添加同行
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在目标集群也要把源集群添加进同行
在这里插入图片描述

  1. 备份HDFS数据到目标集群

在备份前,我们先查看备份文件的大小,以便后面恢复后来比对,这里可以查看到HDFS上/dumpfile/dump.sql目录下的文件大小为49.3M

[root@cdh01 ~]# hadoop fs -du -h /dumpfile
  • 1

在这里插入图片描述
在目标集群点击备份,复制计划,进入到复制界面,点击创建计划
在这里插入图片描述
按照下图配置好,设置为立即执行,提交后,就开始执行。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

运行完成。我们去目标集群看,可以看到已经复制过去,并且数据也正常

在这里插入图片描述

  1. 从目标集群恢复HDFS数据到源集群

从源集群删除掉/dumpfile这个目录和里面的文件

[root@cdh01 ~]# hadoop fs -rmr /dumpfile
  • 1

在这里插入图片描述
删除成功。现在从目标集群设置复制计划把数据导回源集群

在这里插入图片描述

在这里插入图片描述

导回去成功。并且查看文件大小也跟之前的一致。

在这里插入图片描述

  1. 备份Hive表到目标集群

student数据库里面的student_info表的数据如下

在这里插入图片描述

在目标集群创建一个Hive复制计划
在这里插入图片描述

复制计划如下,创建完成,确认后开始运行

在这里插入图片描述

在这里插入图片描述

在目标集群上可以看到备份过来的数据

在这里插入图片描述
4. 从目标集群恢复Hive表到源集群

在源集群上删除表student_info

在这里插入图片描述

在源集群创建Hive复制计划,并执行,把Hive表的数据传送回来

在这里插入图片描述

在这里插入图片描述

在源集群上查询表student_info,可以看到已经还原成功。

在这里插入图片描述

4.4 本地备份与恢复

  1. 把HDFS上的数据备份到本地OS

在HDFS上查看/testdd/a.txt 内容如下

[root@cdh01 dump]# hadoop fs -cat /testdd/a.txt
  • 1

在这里插入图片描述

把HDFS上/testdd/a.txt导出到本地/root/目录下

[root@cdh01 ~]# hadoop fs -get /testdd/a.txt /root/
  • 1

在这里插入图片描述
2. 把本地备份文件恢复到HDFS上

上传前,把HDFS上的文件先删除

[root@cdh01 ~]# hadoop fs -rmr /testdd/a.txt
[root@cdh01 ~]# hadoop fs -ls /testdd
  • 1
  • 2

在这里插入图片描述

在这里插入图片描述
上面可以看到HDFS上的文件已经被删除

然后,从本地上传导出的文件到HDFS上,并查看

[root@cdh01 ~]# hadoop fs -put a.txt /testdd   
[root@cdh01 ~]# hadoop fs -cat /testdd/a.txt
  • 1
  • 2

在这里插入图片描述

可以看到与备份之前的文件数据一致,验证成功。

5 总结

1.NameNode元数据的备份,是通过复制元数据存储目录下的文件来实现。恢复的时候再把复制的文件移动回去,来完成恢复。

2.MariaDB数据库的备份也是通过mysqldump命令导出需要备份的数据库或者表,保存在操作系统中,恢复的时候再用mysql命令导回到数据库中来实现。

3.对于HDFS数据的备份,可以通过BDR把HDFS上想保存的数据或者Hive表备份到其他集群中。也可以再命令行把数据复制到本地文件系统上来保存。

4.与上面三种情况不同的是,通过HDFS快照和HBase快照来创建快照的时候,并没有把真实的数据进行备份,而是保存了在创建快照那个时刻的一组元数据信息的集合。并且当为某个目录创建了快照后,该目录是不能被删除或者重命名的,也不能再为其子目录创建快照。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值