一篇文章彻底理解 HDFS 的安全模式

news2025/1/9 15:42:54

一篇文章彻底理解 HDFS 的安全模式

1 什么是 HDFS 的安全模式

Hdfs 的安全模式,即 HDFS safe mode, 是 HDFS 文件系统的一种特殊状态,在该状态下,hdfs 文件系统只接受读数据请求,而不接受删除、修改等变更请求,当然也不能对底层的 block 进行副本复制等操作。

从本质上将,安全模式 是 HDFS 的一种特殊状态,而 HDFS 进入该特殊状态的目的,是为了确保整个文件系统的数据一致性/不丢失数据,从而限制用户只能读取数据而不能改动数据的。

2 什么情况下 HDFS 会进入安全模式

HDFS 进入安全模式的情况分为两种,即主动进入与被动进入。

2.1 HDFS 被动进入安全模式

管理员出于运维管理等各种原因,可以主动执行命令让 hdfs 进入安全模式,相关的命令有:hdfs dfsadmin -safemode enter/get/leave;

2.2 HDFS 主动进入安全模式

HDFS 也可能会主动进入安全模式,这种情况更为常见,是 HDFS 在特殊状况下,为了保证整个文件系统的数据一致性/整个文件系统不丢失数据,而主动进入的一种自我保护状态,底层根本原因又分为两种:

  • HDFS 底层启动成功并能够跟 namenode 保持定期心跳的 datanode 的个数没有达到指定的阈值, 阈值通过参数 dfs.namenode.safemode.min.datanodes 指定;
  • HDFS 底层达到了最小副本数要求的 block 的百分比没有达到指定的阈值:最小副本数通过参数 dfs.namenode.replication.min/dfs.namenode.safemode.replication.min 指定,阈值通过参数 dfs.namenode.safemode.threshold-pct 指定;
  • 当然如果 HDFS 底层启动成功并能够跟 namenode 保持定期心跳的 datanode 的个数没有达到指定的阈值,此时HDFS 底层达到最小副本数要求的 block 的百分比一般也都不会达到指定的阈值;
  • 不难理解,正常情况下,HDFS 启动过程中会有一段时间主动进入安全模式并在一段时间后主动退出安全模式,这是由 hdfs 的分本式架构决定的,因为 namenode 启动成功后,需要等待 datanode 启动成功并通过心跳汇报 datanode 上存储的 block 的信息(block report),只有在掌握了足够的 block 的信息(达到最小副本数要求的 block 占所有 block 的百分比达到指定的阈值),并等待特定时间后(通过参数 dfs.namenode.safemode.extension 30000控制),才会主动退出安全模式。

从现实情况来看,常见的HDFS进入安全模式的直接原因有:

  • 部分 datanode 启动失败或者因为网络原因与 namenode 心跳失败;
  • 部分 datanode 节点存储 hdfs 数据的磁盘卷有损坏,导致存储在该磁盘卷中的数据无法读取;
  • 部分 datanode 节点存储 hdfs 数据的磁盘分区空间满,导致存储在该磁盘卷中的数据无法正常读取;

3 HDFS 进入安全模式怎么办?

3.1 分析原因

当 HDFS 主动进入安全模式后,首先需要分析其主动进入安全模式的原因,可以通过以下途径进行分析:

  • 查看 namenode webui:可以查看 hdfs namenode webui 的 “overview”/“Startup Progress”/“Datanode Volume Failures” 等页面;
  • 查看 namenode 和 datanode 日志,可以直接查看后台主机特定目录下的文件,如 /var/log/hadoop-hdfs目录下的 hadoop-hdfs-hdfs-datanode-node1.out/hadoop-cmf-hdfs-NAMENODE-node1.log.out 等文件,也可以通过 CM 等管控台的 “诊断-日志” 等页面指定服务指定时间指定日志级别进行搜索;
  • 比如如下报错日志,即提示了 /dev/mapper/rhel-root 对应的文件系统即根目录磁盘空间不足,hadoop自动进入了安全模式:
- org.apache.hadoop.hdfs.server.namenode.FSNamesystem:NameNode low on available disk space.Already in safemode.
- org.apache.hadoop.hdfs.StateChange: STATE* Safemode is ON. Resources are low on NN. Please add or free up more resources then turn off safemode manually. NOTE:If you turn off safemode before adding resources,the NN will immediately return to safemode. Use"hdfs dfsadmin -safemode leave" to turn safemode off.
- org.apache.hadoop.hdfs.server.namenode.NameNodeResourceChecker:Space available on volume '/dev/mapper/rhel-root' is 103092224, which is below the configured reserved amount 104857600

3.2 修复问题

通过以上排查确认进入安全模式的原因后,就可以进行针对性的修复了:

  • 比如如果有 datanode 未启动成功,则尝试修复并启动对应的 datanode;
  • 比如如果有 datanode 存储 hdfs 数据的磁盘分区空间满,则尝试扩展磁盘分区空间;
  • 比如如果有 datanode 存在存储卷故障,则尝试修复存储卷,如果无法修复则需要替换存储卷(会丢失存储卷上的数据);
  • 需要注意的是,如果出现了某些 datanode 节点彻底损坏无法启动,或某些 datanode 节点磁盘卷故障彻底无法修复的情况,则这些数据对应的 block 及 block 上层的 hdfs 文件,就被丢失了,后续可能需要联系业务人员补数据(从上游重新拉取数据,或重新运行作业生成数据),如果业务人员也无法补数据,这些数据就被彻底损坏无法恢复了;
  • 可以通过如下命令查看丢失的 block 及这些 block 对应的上层 hdfs 文件,并记录下来后续交给业务人员去判断是否需要补数据:hdfs fsck / -list-corruptfileblocks,hdfs fsck / -files -blocks -locations;
  • 对于不存在数据丢失的情况,按照上述方式修复并重启集群后,HDFS 就会退出安全模式并正常对外提供读写服务;
  • 对于存在数据丢失的情况,需要通过如下命令手动退出安全模式并删除损坏的/丢失的 block 对应的上层 hdfs 文件:
    • 退出安全模式(只有退出安全模式才能删除数据):sudo -u hdfs hdfs dfsadmin -safemode leave;
    • 删除丢失的 blockd 对应的上层 hdfs 文件(自动检查文件系统并把丢失的block的上层hdfs文件删除):sudo -u hdfs hdfs fsck / -delete;
    • 在删除了丢失的 block 对应的上层 hdfs 文件后,HDFS 底层达到最小副本数要求的 block 的百分比就达到了指定的阈值(总文件数降低了总 block数也相应降低了,所以成功汇报的block的百分比就相应上升达到阈值了),所以重启后也就能够正常退出安全模式并正常对外提供读写服务了;

3.3 修复问题的错误方法

不对 hdfs 主动进入安全模式的具体原因进行分析,而是直接通过如下方法强制退出安全模式,是无脑的错误示范:

  • 直接通过命令强制退出安全模式:sudo -u hdfs hdfs dfsadmin -safemode leave
  • 不经分析直接删除损坏的文件:sudo -u hdfs hdfs fsck / -delete
  • 直接更改相关参数降低安全模式阈值:比如 dfs.namenode.safemode.threshold-pct/dfs.namenode.safemode.min.datanodes;

4 HDFS 安全模式相关参数

HDFS 安全模式相关参数有:

- dfs.namenode.safemode.threshold-pct: 副本数达到最小要求的 block 占系统总block数的百分比, default 0.999f,Specifies the percentage of blocks that should satisfy the minimal replication requirement defined by dfs.namenode.replication.min. Values less than or equal to 0 mean not to wait for any particular percentage of blocks before exiting safemode. Values greater than 1 will make safe mode permanent;
- dfs.namenode.safemode.min.datanodes:离开安全模式的最小可用datanode数量要求,default 0,Specifies the number of datanodes that must be considered alive before the name node exits safemode. Values less than or equal to 0 mean not to take the number of live datanodes into account when deciding whether to remain in safe mode during startup. Values greater than the number of datanodes in the cluster will make safe mode permanent;
- dfs.namenode.safemode.extension:集群可用 block 比例、可用 datanode 都达到要求之后,自动退出安全模式的时延,default	30000,Determines extension of safe mode in milliseconds after the threshold level is reached. Support multiple time unit suffix (case insensitive), as described in dfs.heartbeat.interval;
- dfs.namenode.safemode.replication.min: 判断能否退出安全模式时对 block 的最小副本数的要求,默认为1,a separate minimum replication factor for calculating safe block count. This is an expert level setting. Setting this lower than the dfs.namenode.replication.min is not recommend and/or dangerous for production setups. When it's not set it takes value from dfs.namenode.replication.min;
- dfs.namenode.replication.min: block 的最小副本数,default 1,	Minimal block replication;
其他磁盘预留空间大小类参数:dfs.datanode.du.reserved/dfs.datanode.du.reserved.pct/dfs.datanode.du.reserved.calculator/dfs.namenode.resource.du.reserved/dfs.namenode.resource.checked.volumes/dfs.namenode.resource.checked.volumes.minimum;

5 一个某客户生产环境HDFS 进入安全模式的修复案例

某客户线上业务系统中的大数据 HIVE 作业无法运行,查看 hdfs 发现进入了安全模式,如下所示:

进一步查看发现,所有 datanode 都成功启动了,但部分 datanode 存在存储卷故障,且这些存储卷背后是 nfs 网络文件系统,如下所示:

查看 datanode日志发现,datanode 底层的 DataXceiver 线程无法读取部分 block,导致 ReplicaNotFoundException:

通过 CM 管控台的 “诊断-日志” 页面,指定服务为HDFS,指定时间为近期1个小时,指定日志级别为 WARN,搜索发现,调用方法
user=pwd.getpwuid(s.st_uid) 时报错了:keyError:‘getpwuid(): uid not found: 4294967294’,且报错对应的正是 nfs 网盘目录:

通过 ls 命令查看发现,上述报错对应的 nfs 网盘目录的 owner显示的正是错误信息中的 4294967294,而不是用户名比如 hdfs等,且通过命令 ”uid hdfs“ 查看发现 hdfs 对应的uid并不是4294967294:

至此问题确认,概括如下:

  • nfs 挂载的目录被认为是 “Datanode Volume Failures” ,所以 nfs 目录下的 block 数据对 hdfs 不可读写,所以副本数达到最小要求的 block 占系统总 block 数的百分比达不到默认的阈值,hdfs 出于数据一致性的要求,自动进入了安全模式;

  • 而导致 hdfs 无法读写 nfs 对应目录下的 block数据的原因是,不知出于何种原因,nfs 对应目录的 owner/group 显示的是 4294967294/4294967294,而不是期望的 hdfs/hdfs,所以底层调用方法 user=pwd.getpwuid(s.st_uid)获取 nfs 对应目录的woner/group 时,报错了:keyError:‘getpwuid(): uid not found: 4294967294’,最后 hdfs 因为无法获取 nfs 对应目录的 owner/group 而无法读取该目录下的文件;

  • 为修复问题,手动通过命令 chown 更改了nfs 对应目录的 owner/group 为 hdfs/hdfs,然后重启 hdfs,在重启后 hdfs 自动进入并自动退出了安全模式,正常对外提供读写服务。

  • 为避免节点重启再出现上述问题,后续安排了了解 nfs 的运维同学帮忙排查下 nfs 挂载的目录为什么显示的 owner/group 是 4294967294/4294967294 而不是 hdfs/hdfs。

  • 最后需要强调说明下,由于 NFS 在性能和稳定性上相比本地磁盘差距不小,不建议在 hdfs 底层使用 nfs 网盘。(如果在测试等环境使用 nfs 网盘,一定要记得需要通过修改文件 /etc/fstab 确保开机自动挂载 nfs).

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/20231.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【攻破css系列——第九天】常规流

文章目录1. 常规流2. 常规流布局2.1 定义2.2 包含块2.3 块盒2.3.1 每个块盒的总宽度,必须等于包含块的宽度2.3.2 每个块盒垂直方向上的auto值2.3.3 百分比取值2.3.4 上下外边距合并(margin塌陷)2.4 行盒2.4.1 盒子沿着内容延伸2.4.2 宽高不可…

Redis基础入门教程 - 概览

Redis基础教程 欢迎加好友一起讨论问题 知识地图:Redis概述与安装https://blog.csdn.net/lili40342/article/details/127852124Redis的5大数据类型https://blog.csdn.net/lili40342/article/details/127897689Redis的发布和订阅https://blog.csdn.net/lili40342/art…

C++模拟OpenGL库——图片处理及纹理系统(四):UV纹理坐标

目录 引入UV纹理坐标及三角形绘制设置 纹理过滤 引入UV纹理坐标及三角形绘制设置 上图其实不是很直观。 UV坐标要解决的问题就是: 假设我有一张500500的纹理图片; 我要把它映射到一张200200的图片中; 这个问题要怎么去解决。 这里提出…

【附源码】Python计算机毕业设计网络考试系统设计

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

百度第三季度财报前瞻:财务业绩预计将超预期

来源:猛兽财经 作者:猛兽财经 百度(BIDU)此前于2022年11月8日发布了一份媒体新闻稿,强调其将在2022年11月22日公布其第三季度财报。 分析师预计百度第三季度的财务业绩将有所改善 根据卖方分析师对百度的一致财务预测&…

基于GPU的kokkos加速安装

基于GPU的kokkos加速安装基于GPU的kokkos加速安装1. 安装lammps2. 安装cmake3. cmake相关文件修改4. cmake编译5. 测试安装lammps及相关库的步骤网上很多,这里介绍在前期步骤准备好的情况下,如果in文件中包含反应力 场以及需要通过voronoi库计算应力&…

【文本分类】《融合知识感知与双重注意力的短文本分类模型》

阅读摘要:   本文主要提出基于TextRCNN模型使用知识图谱、双重注意力感知来改进短文本分类,最终提高了精度。 参考文献:   [1] 融合知识感知与双重注意力的短文本分类模型 参考论文信息 (很牛) 论文名称&#xff1…

算法课实验报告解析(4班供参考)

有两个题1.第一题2.第二题1.第一题 &#x1f60b;题目描述&#xff1a; 给定一个整数数组A(ao&#xff0c;a1&#xff0c;…,an-1),若岗且ai>aj&#xff0c;则<ai.aj>就为一个逆序对。例如数组&#xff08;3,1,4,5,2,&#xff09;的逆序对有<3,1>、< 3,2>…

C++STL-string类的实现(上)

在上一篇中&#xff0c;我们知道了string类的一些基本使用&#xff0c;这一篇我们就说一下string类的具体的底层实现。 文章目录1.预前准备1.1 初步的构造和析构1.2 下标的运算符重载2. 深浅拷贝2.1 拷贝构造函数2.2 运算符重载3. 完善前面写的函数3.1 完善构造函数和析构函数…

【自用】Linux服务器部署Oracle并使用数据库管理工具Navicat远程连接(包含远程Navicat配置)

一、服务器端 配置 0.传输oracle安装包和依赖 1.更新依赖 yum update2.检测oracle依赖 rpm -ivh oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm # 请根据版本选择3.yum安装oracle-database-preinstall yum install oracle-database-preinstall-19c-1.0-1.el7.x86_6…

Azide-PEG-Cholesterol,N3-PEG-Cholesterol,叠氮-PEG-胆固醇PEG试剂供应

化学试剂胆固醇-聚乙二醇-叠氮,其英文名为Cholesterol-PEG-Azide&#xff08;Cholesterol-PEG-N3&#xff09;&#xff0c;它所属分类为DSPE PEG Azide PEG。 试剂胆固醇PEG叠氮的分子量均可定制&#xff0c;有&#xff1a;Cholesterol-PEG 2k-Azide、胆固醇-聚乙二醇 3.4k-叠…

SMBMS系统_准备工作

构建项目Maven/jar 初次构建项目时&#xff0c;思考是不是通过maven创建&#xff0c;使用maven的化需要导入那些依赖&#xff1b; 如果不是使用maven创建项目的话&#xff0c;使用哪些些jar包。 检测验证项目 选择使用maven创建项目完成&#xff0c;可以使用模板&#xff0c…

嵌入式分享合集106

一、可控硅控制电路实例 可控硅是可控硅整流器的简称。可控硅有单向、双向、可关断和光控几种类型。它具有体积小、重量轻、效率高、寿命长、控制方便等优点&#xff0c;被广泛用于可控整流、调压、逆变以及无触点开关等各种自动控制和大功率的电能转换的场合。 单向可控硅是一…

【CloudCompare教程】001:CloudCompare中文版下载与安装图文教程

CloudCompare是一款功能强大的点云后处理软件,本文讲解CloudCompare中文版下载与安装方法。 文章目录 一、CloudCompare下载地址二、CloudCompare安装教程三、CloudCompare中文设置一、CloudCompare下载地址 官方下载地址:http://www.danielgm.net/cc/release/ 二、CloudComp…

vue中使用wangeditor富文本编辑器

官方文档 项目中要求实现富文本编辑器取编辑内容 这种编辑器有好多选择了wangeditor富文本编辑器 首先根据文档安装 yarn add wangeditor/editor # 或者 npm install wangeditor/editor --saveyarn add wangeditor/editor-for-vuenext # 或者 npm install wangeditor/edit…

MySQL进阶实战8,分区表详解

目录一、分区表二、分区的作用三、分区的一些限制四、分区表的增删改查1、select2、insert3、delete4、update五、分区表的类型六、如何使用分区表七、分区表会有哪些问题&#xff1f;1、分区列和索引列不匹配2、选择分区的成本可能很高3、打开并锁住所有底层表的成本可能会很高…

统计信号处理基础 习题解答6-9

题目&#xff1a; 在开关键控&#xff08;OOK&#xff09;的通信系统中&#xff0c;我们发射两个信号中的一个&#xff0c;即 表示bit0&#xff0c;而 表示bit1。假定幅度是正的&#xff0c;为了确定发射的是哪个bit&#xff0c;我们对接收机的波形在符号周期内 进行采样&…

深入了解快速排序和归并排序

作者&#xff1a;~小明学编程 文章专栏&#xff1a;Java数据结构 格言&#xff1a;目之所及皆为回忆&#xff0c;心之所想皆为过往 快速排序和归并排序作为排序中的两个重点&#xff0c;也是面试中最常考的两个知识点&#xff0c;这里带大家详解的了解这两个排序。 目录 快速…

DSPE-PEG-TPP;磷脂-聚乙二醇-磷酸三苯酯;(阻燃剂TPP)是种含磷元素的化合物,可用作无卤环保型阻燃剂

中文名称&#xff1a; 二硬脂酰基磷脂酰乙醇胺-聚乙二醇-磷酸三苯酯&#xff1b;三苯基磷聚乙二醇磷脂 英文简称&#xff1a; DSPE-PEG-TPP,TPP-PEG-DSPE 分子量&#xff1a; 2000,3400,5000等 溶剂: 溶于部分有机溶剂 磷酸三苯酯为无味、无臭的白色结…

JDK8 连接Access数据库

JDK8 连接Access数据库1. 安装JDK82. 下载配置文件3. 源码设置前面我们讲了如何使用Java连接ODBC并配置Access数据库&#xff0c; 参考连接&#xff1a;https://jackwei.blog.csdn.net/article/details/86285822 可以知道JDK8之后已经不支持jdbc-odbc桥接了&#xff0c;如果你可…