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

文章目录

(159)NameNode故障处理

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

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

(1)kill -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里进行设置的。

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

复制代码
(1)bin/hdfs dfsadmin -safemode get	(功能描述:查看安全模式状态)
(2)bin/hdfs dfsadmin -safemode enter (功能描述:进入安全模式状态)
(3)bin/hdfs dfsadmin -safemode leave	(功能描述:离开安全模式状态)
(4)bin/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

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

参考文献

  1. 【尚硅谷大数据Hadoop教程,hadoop3.x搭建到集群调优,百万播放】
相关推荐
旗讯数字2 分钟前
旗讯 OCR 工业手写识别解决方案|破解车间纸质表单录入难题,加速生产数字化转型
大数据·ocr
会Tk矩阵群控的小木5 分钟前
抖音电商矩阵系统技术方案:多店铺账号运营管理全模块实现详解
大数据
小马爱打代码6 分钟前
Elasticsearch 集群容器化部署:构建 PB 级搜索与分析平台
大数据·elasticsearch·搜索引擎
大黄说说8 分钟前
码云数智门店系统赋能汽车服务门店全新发展
大数据·人工智能
果丁智能24 分钟前
从人工值守到云端智控:物联网智能锁重塑公寓与集团宿舍管理体系
大数据·人工智能·物联网·智能家居
XTIOT66636 分钟前
多形态护照 OCR 读取器传输机制、识别算法与行业落地技术对比
大数据·人工智能·嵌入式硬件·物联网·ocr
学术小白人40 分钟前
【早鸟优惠】第二届AI赋能图像处理与计算机视觉技术国际学术研讨会(AIPCVT 2026)
大数据·人工智能·医学·数字能源·学术会议参会
2601_9549711341 分钟前
大数据专业适合冲一冲还是稳一稳
大数据
Volunteer Technology1 小时前
Flink Table API与SQL(二)
大数据·数据库·flink
知识分享小能手1 小时前
Hadoop学习教程,从入门到精通,Flume日志采集系统 — 完整知识点与案例代码(9)
hadoop·学习·flume