HDFS 安全模式

HDFS 安全模式

任务目的
了解什么是安全模式,知晓集群在安全模式下能做什么工作
掌握集群进入和退出安全模式的三种情况
掌握集群在正常冷启动时进入安全模式的原理
任务清单
任务1:安全模式简介
任务2:进入安全模式的三种情况
任务3:退出安全模式的三种方式
详细任务步骤

任务1:安全模式简介

问题场景:

集群启动后,可以查看目录,但是上传文件时报错,打开 Web 页面可看到 NameNode 正处于 SafeMode 状态,怎么处理?

SafeMode 是 NameNode 的一种特殊状态(Active/Standby/SafeMode 安全模式),在这种状态下,文件系统只接受读数据请求(ls、cat),而不接受上传、删除、修改等变更请求。

在 NameNode 主节点启动时,HDFS 首先进入安全模式,**DataNode 在启动的时候会向 NameNode 发送心跳信号并汇报可用的 block 的状态,**当整个系统达到安全标准时,HDFS 自动离开安全模式。

如果 HDFS 处于安全模式下,则文件 block 不能进行任何的副本复制操作。

任务2:进入安全模式的三种情况

1. HDFS 集群正常冷启动

在 HDFS 集群正常冷启动时, NameNode 会在 SafeMode 状态下维持相当长的一段时间,此时你不需要去理会,等待它自动退出安全模式即可。

在刚运行完 start-dfs.sh 命令时,50070页面显示的信息:

正常冷启动时进入安全模式的原理:

NameNode 的内存元数据中,包含文件路径、副本数、blockid 及每一个 block 所在 DataNode 的信息,而 fsimage 中,不包含 block 所在的 DataNode 信息。

那么,当 NameNode 冷启动时,此时内存中的元数据只能从 fsimage 中加载而来,从而就没有 block 所在的 DataNode 信息 ——> 就会导致 NameNode 认为所有的 block 都已经丢失 ——> 从而进入安全模式 ——> 随着 DataNode 陆续启动,DataNode 定期向 NameNode 汇报自身所持有的 blockid 信息, NameNode 就会将内存元数据中的 block 所在 DataNode 信息补全更新 ——> 找到了所有 block 的位置,从而自动退出安全模式。

2. block 丢失率达到 0.1%

如果 NameNode 发现集群中的 block 丢失率达到一定比例时(0.1%), NameNode 就会进入安全模式。这个丢失率是可以手动配置的,默认是在配置文件 hdfs-default.xml 中定义了最小的副本率为 dfs.namenode.safemode.threshold-pct=0.999f。

<property> 
<name>dfs.namenode.replication.min</name> 
<value>1</value> 
<description>Minimal block replication. </description>
</property> 

<property> 
<name>dfs.namenode.safemode.threshold-pct</name> 
<value>0.999f</value> 
<description>
    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.
</description>
</property> 

Hadoop 中每个块默认的最小副本数为 1,由 dfs.namenode.replication.min 参数控制。

dfs.namenode.safemode.threshold-pct 参数的意思是指定应有多少比例的数据块满足最小副本数的要求。这个值小于、等于0表示无须等待就可以退出安全模式;而如果这个值大于 1 表示永远处于安全模式。如果设为 1 则 HDFS 永远是处于 SafeMode。这是因为在集群环境中,DataNode 上报的 block 个数永远无法完全达到 NameNode 节点中元数据记录的 block 个数。

3. 手动进入安全模式

hdfs dfsadmin -safemode enter

效果图如下所示:在这里插入图片描述

可以使用如下命令查看集群是否处于安全模式中:

hdfs dfsadmin -safemode get

效果图如下所示:
在这里插入图片描述

进入安全模式后,文件系统只接受读数据请求(ls、cat),而不接受上传、删除、修改等变更请求。
在这里插入图片描述

任务3:退出安全模式的三种方式
  (1)在 HDFS 集群正常冷启动完成后,自动退出
  (2)手动退出安全模式(但是并不能真正地解决问题)

hdfs dfsadmin -safemode leave

效果如下所示:
在这里插入图片描述
  (3)找到问题所在,进行相应修复

场景1:

公司现在有搭建好的 Hadoop 集群,现在想要运行 MapReduce 程序,此时发现 YARN 集群启动不成功,报 IOException 异常,异常的大致意思就是磁盘空间满了,导致程序在 HDFS 上创建文件失败!!!
在这里插入图片描述

发现磁盘使用100%,导致空间不足,从而使 Hadoop 运行程序时,需要建立临时的文件的控件都没有,所以导致程序运行失败,出现 IOException 异常。

现在为了能让程序运行成功,我们可以先手动删除几个占用空间比较大而且无关紧要的文件,一般线上挂载的磁盘都比较大,出现这样的异常情况,几率是非常小的。

删除文件后,再次运行程序,发现又报异常,看日志发现,Hadoop 由于磁盘已满,而导致集群进行了安全模式,所以再次导致程序运行失败,此时,我们只需要使用命令主动退出安全模式即可。

hdfs dfsadmin -safemode leave
再次运行程序,此时正常运行。

集群中大部分 DataNode 宕机,导致文本块丢失,进而集群进入安全模式,此时只需要修复宕机的 DataNode 即可。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据AI铭仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值