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

本文主要是介绍Hadoop3教程(三十二):(生产调优篇)NameNode故障恢复与集群的安全模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • (159)NameNode故障处理
  • (160)集群安全模式&磁盘修复
    • 集群安全模式
    • 磁盘修复
    • 等待安全模式
  • 参考文献

(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 getSafe 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搭建到集群调优,百万播放】

这篇关于Hadoop3教程(三十二):(生产调优篇)NameNode故障恢复与集群的安全模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/259775

相关文章

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

PyCharm 接入 DeepSeek最新完整教程

《PyCharm接入DeepSeek最新完整教程》文章介绍了DeepSeek-V3模型的性能提升以及如何在PyCharm中接入和使用DeepSeek进行代码开发,本文通过图文并茂的形式给大家介绍的... 目录DeepSeek-V3效果演示创建API Key在PyCharm中下载Continue插件配置Con

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

MySQL8.2.0安装教程分享

《MySQL8.2.0安装教程分享》这篇文章详细介绍了如何在Windows系统上安装MySQL数据库软件,包括下载、安装、配置和设置环境变量的步骤... 目录mysql的安装图文1.python访问网址2javascript.点击3.进入Downloads向下滑动4.选择Community Server5.

Java实现状态模式的示例代码

《Java实现状态模式的示例代码》状态模式是一种行为型设计模式,允许对象根据其内部状态改变行为,本文主要介绍了Java实现状态模式的示例代码,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来... 目录一、简介1、定义2、状态模式的结构二、Java实现案例1、电灯开关状态案例2、番茄工作法状态案例

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

MySql9.1.0安装详细教程(最新推荐)

《MySql9.1.0安装详细教程(最新推荐)》MySQL是一个流行的关系型数据库管理系统,支持多线程和多种数据库连接途径,能够处理上千万条记录的大型数据库,本文介绍MySql9.1.0安装详细教程,... 目录mysql介绍:一、下载 Mysql 安装文件二、Mysql 安装教程三、环境配置1.右击此电脑