Hadoop3教程(三十二):(生产调优篇)NameNode故障恢复与集群的安全模式-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

文章目录

159NameNode故障处理

如果NameNode进程挂了并且存储的数据也丢失了如何恢复NameNode

首先我们可以通过以下代码来模拟故障

1kill -9 NameNode进程

[atguigu@hadoop102 current]$ kill -9 19886

2删除NameNode存储的数据/opt/module/hadoop-3.1.3/data/tmp/dfs/name

[atguigu@hadoop102 hadoop-3.1.3]$ rm -rf /opt/module/hadoop-3.1.3/data/dfs/name/*

接下来我们开始解决问题

1拷贝SecondaryNameNode中数据到原NameNode存储数据目录

[atguigu@hadoop102 dfs]$ scp -r atguigu@hadoop104:/opt/module/hadoop-3.1.3/data/dfs/namesecondary/* ./name/

2重新启动NameNode

[atguigu@hadoop102 hadoop-3.1.3]$ hdfs --daemon start namenode

3向集群上传一个文件

那是不是这种方式能完全保证没有数据遗漏呢

自然是不能的因为SecondaryNameNode备份数据不是实时的而是每隔一段时间去备份一次NN假如正好在这段时间里NN写入了大量数据那这些自然 就遗失掉了。

不过现实中一般不会用SecondaryNameNode做备份的方式而是采用NameNode的高可用HA模式即启用两个NameNode的方式来容灾。

所以本节的内容做简单了解下就行了。

160集群安全模式&磁盘修复

集群安全模式

集群在启动的时候会进入安全模式一段时间等待数据和节点等加载到一定程度后才会自动退出安全模式。

当集群处于安全模式中时文件系统只接受读数据请求而不接受删除、修改等变更请求。

所以集群启动后一段时间内其实是无法上传数据、删除数据的。

什么场景下会进入安全模式呢

  • NameNode在加载镜像文件和编辑日志的时候会处于安全模式就是指集群启动的时候
  • NameNode在接收DataNode注册时会处于安全模式
  • 数据块的副本缺失。导致某些数据块的可用副本数量少于设置值
  • 。。。

满足什么条件时集群会退出安全模式呢

主要是依赖以下三个条件

dfs.namenode.safemode.min.datanodes即最小可用datanode数量默认0。换句话说集群需要有至少一个DataNode是可用的

dfs.namenode.safemode.threshold-pct副本数达到最小要求的block占系统总block数的百分比默认0.999f。就是说只要有超过一个块丢了集群就不能退出安全模式。

dfs.namenode.safemode.extension稳定时间默认值30000毫秒即30秒。即集群处于安全模式已经超过了30s。

以上三个条件都满足时集群才会自动退出安全模式。对应的这几个参数都是在hdfs-default.xml里进行设置的。

关于安全模式集群支持的指令有

1bin/hdfs dfsadmin -safemode get	功能描述查看安全模式状态
2bin/hdfs dfsadmin -safemode enter 功能描述进入安全模式状态
3bin/hdfs dfsadmin -safemode leave	功能描述离开安全模式状态
4bin/hdfs dfsadmin -safemode wait	功能描述等待安全模式状态

磁盘修复

接下来模拟一下由于数据块损坏而进入安全模式的案例。

1分别进入hadoop102、hadoop103、hadoop104的/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-1015489500-192.168.10.102-1611909480872/current/finalized/subdir0/subdir0目录统一删除某2个块信息

[atguigu@hadoop102 subdir0]$ pwd
/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-1015489500-192.168.10.102-1611909480872/current/finalized/subdir0/subdir0

[atguigu@hadoop102 subdir0]$ rm -rf blk_1073741847 blk_1073741847_1023.meta
[atguigu@hadoop102 subdir0]$ rm -rf blk_1073741865 blk_1073741865_1042.meta

说明hadoop103/hadoop104重复执行以上命令

但是你删除后会发现集群仍然还在正常工作也没有进入安全模式。这是因为NameNode还没有发现自己少数据了 。因为默认情况下DataNode是每隔六小时会向NameNode主动汇报自己的数据情况只有到那时候NameNode才知道出事了才能启动安全模式。

所以在本次模拟中我们可以采用重新启动集群的方式让NameNode立马知道出事了。因为集群启动时各个DataNode会统一向NameNode 汇报自己的数据情况。

​ 2重新启动集群

[atguigu@hadoop102 subdir0]$ myhadoop.sh stop
[atguigu@hadoop102 subdir0]$ myhadoop.sh start

​ 3观察http://hadoop102:9870/dfshealth.html#tab-overview

在这里插入图片描述

​ 说明安全模式已经打开原因是块的数量没有达到要求。

​ 4手动离开安全模式

[atguigu@hadoop102 subdir0]$ hdfs dfsadmin -safemode get
Safe mode is ON
[atguigu@hadoop102 subdir0]$ hdfs dfsadmin -safemode leave
Safe mode is OFF

​ 5观察http://hadoop102:9870/dfshealth.html#tab-overview

在这里插入图片描述

现在整个集群已经退出了安全模式可以进行正常的删除和修改只是界面最上面会一直提示你少了两个文件块。如果你不准备修复同时嫌弃这个提示碍眼的话可以去到HDFS目录里把这两个文件块对应的元数据给删掉。只要删掉对应的元数据那么谁都不会知道这两个文件块曾经存在过。

​ 6将元数据删除

在这里插入图片描述

在这里插入图片描述

7观察http://hadoop102:9870/dfshealth.html#tab-overview集群已经正常没有再提示缺文件块了。

等待安全模式

核心是hdfs dfsadmin -safemode wait这个命令。

它的作用是如果检测到集群处于安全模式中该命令就会卡住直到其重新检测到集群已经退出安全模式后才会退出阻塞状态继续执行后续的命令。

所以一般用来写一些特殊的脚本脚本里是你希望在集群退出安全模式后立即执行的一些处理。

直接抄教程里的例子当集群退出安全模式后立即上传指定文件

1查看当前模式

[atguigu@hadoop102 hadoop-3.1.3]$ hdfs dfsadmin -safemode get

Safe mode is OFF

2先进入安全模式

[atguigu@hadoop102 hadoop-3.1.3]$ bin/hdfs dfsadmin -safemode enter

3创建并执行下面的脚本

在/opt/module/hadoop-3.1.3路径上编辑一个脚本safemode.sh

[atguigu@hadoop102 hadoop-3.1.3]$ vim safemode.sh

#!/bin/bash
hdfs dfsadmin -safemode wait
hdfs dfs -put /opt/module/hadoop-3.1.3/README.txt /

[atguigu@hadoop102 hadoop-3.1.3]$ chmod 777 safemode.sh
[atguigu@hadoop102 hadoop-3.1.3]$ ./safemode.sh 

脚本safemode.sh的意思是如果检测到集群处于安全模式则阻塞当前进程直到集群退出安全模式停止阻塞然后立刻上传README.txt文件到HDFS。

4再打开一个窗口执行

[atguigu@hadoop102 hadoop-3.1.3]$ bin/hdfs dfsadmin -safemode leave

5再观察上一个窗口

Safe mode is OFF

6HDFS集群上已经有上传的数据了

在这里插入图片描述

参考文献

  1. 【尚硅谷大数据Hadoop教程hadoop3.x搭建到集群调优百万播放】
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Hadoop