HDFS安全模式实战篇

             HDFS安全模式实战篇

                                   作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

 

 

一.安全模式概述

1>.什么是安全模式

  安全模式是NameNode的一种状态,其中节点不接受对HDFS命名空间的任何更改,这意味着HDFS处于只读状态。NameNode在启动时自动进入安全模式,当配置的最小百分比的块满足最小复制条件时,NameNode自动离开安全模式。

  NameNode可以自动进入安全模式,也可以在执行某些维护操作(例如备份HDFS元数据)之前将其置于安全模式。

2>.自动安全模式操作 

  当启动Namenode时,它不会立即开始向DataNode复制数据。NameNode首先自动进入称为安全模式的特殊只读操作状态。在此模式下,NameNode不接受任何更改其命名空间的请求。因此,直到它离开安全模式之前,它避免复制甚至删除任何数据块。

  我们知道DataNode不断向NameNode发送两个东西:一个是心跳信息,指示它们还活着;一个是块报告,列出存储在DataNode上的所有数据块。一旦NameNode从DataNode接收到足够多的块报告,就表面它们具有该块的最小数量的副本,Hadoop就任务该数据块"安全的"被复制。

  Hadoop让NameNode等待DataNode报告块信息,因此即使在尚未报告其块信息的DataNode上存在正确数量的副本,它也不会过早地开始复制数据。当预配置的百分比的块报告达到可以安全复制条件时,NameNode离开安全模式并开始向客户端提供块信息。而且它开始复制DataNode已报告为可以复制的所有块。

  当NameNode重新启动时会自动进入和转换到安全模式,但有可能需要将NameNode置于安全模式。每当冻结命名空间时,需要将NameNode置于安全模式。因此,可以将安全模式看作使集群处于维护模式的工具。

  温馨提示:
    当NameNode处于安全模式时,不能写入HDFS数据。如果尝试执行写操作,则会出现如下图所示的错误哟~

 

二.将NameNode置于安全模式

  有时需要执行让HDFS处于只读模式的管理操作。在此操作期间可以将NameNode显式置于安全模式。执行管理操作后,让NameNode退出安全模式。

  使用dfsadmin -safemode命令管理Namenode的安全模式操作,可以使用-safemode get命令检查当前安全模式的状态,接下来就让我们实战操作一下吧。

1>.查看HDFS集群当前安全模式的状态

[root@hadoop101.yinzhengjie.com ~]# hdfs dfsadmin -safemode get            #查看集群当前的状态
Safe mode is OFF
[root@hadoop101.yinzhengjie.com ~]# 
[root@hadoop101.yinzhengjie.com ~]# hdfs dfsadmin -safemode get            #查看集群当前的状态

2>.将NameNode置于安全模式

[root@hadoop101.yinzhengjie.com ~]# hdfs dfsadmin -safemode get
Safe mode is OFF
[root@hadoop101.yinzhengjie.com ~]# 
[root@hadoop101.yinzhengjie.com ~]# hdfs dfsadmin -safemode enter            #将HDFS集群置于安全模式状态
Safe mode is ON
[root@hadoop101.yinzhengjie.com ~]# 
[root@hadoop101.yinzhengjie.com ~]# hdfs dfsadmin -safemode get
Safe mode is ON
[root@hadoop101.yinzhengjie.com ~]# 
[root@hadoop101.yinzhengjie.com ~]# hdfs dfsadmin -safemode enter            #将HDFS集群置于安全模式状态

3>.使NameNode离开安全模式

[root@hadoop101.yinzhengjie.com ~]# hdfs dfsadmin -safemode get
Safe mode is ON
[root@hadoop101.yinzhengjie.com ~]# 
[root@hadoop101.yinzhengjie.com ~]# hdfs dfsadmin -safemode leave              #使NameNode离开安全模式
Safe mode is OFF
[root@hadoop101.yinzhengjie.com ~]# 
[root@hadoop101.yinzhengjie.com ~]# hdfs dfsadmin -safemode get
Safe mode is OFF
[root@hadoop101.yinzhengjie.com ~]# 
[root@hadoop101.yinzhengjie.com ~]# hdfs dfsadmin -safemode leave              #使NameNode离开安全模式

4>.使NameNode等待恢复操作,直到HDFS退出安全模式

[root@hadoop101.yinzhengjie.com ~]# more wait.sh 
#!/bin/bash
#
#********************************************************************
#Author:        yinzhengjie
#QQ:             1053419035
#Date:             2019-11-25
#FileName:        wait.sh
#URL:             http://www.cnblogs.com/yinzhengjie
#Description:        The test script
#Copyright notice:     original works, no reprint! Otherwise, legal liability will be investigated.
#********************************************************************

flag=`hdfs dfsadmin -safemode get | awk '{print $4}'`

if [ "$flag" == "ON" ];then
    echo "######  当前集群处于安全模式 ######"
    hdfs dfsadmin -safemode wait  #当NameNode进入安全模式时,就等待安全模式退出后在执行下面的代码
fi

echo "######  当前集群已退出安全模式 ######"

hdfs dfs -ls /yinzhengjie

echo "****** 开始写入数据 ******"

hdfs dfs -put /etc/fstab /yinzhengjie/

echo "****** 数据写入完成 ******"

hdfs dfs -ls /yinzhengjie
[root@hadoop101.yinzhengjie.com ~]# 
[root@hadoop101.yinzhengjie.com ~]# more wait.sh          #编写测试脚本,执行效果如下图所示

5>.温馨提示

  我们知道NameNode每次启动时自动进入安全模式。此外,当NameNode运行的服务器的磁盘空间不足时,NameNode也将进入安全模式。

  NameNode将其元数据存储在使用"dfs.namenode.name.dir"参数指定的目录中。NameNode用于元数据的存储空间量取决于"dfs.datanode.du.reserved"关键参数的设置。此参数默认指定Hadoop为NameNode写入其命名空间信息二保留的可用空间的阈值。在默认情况下此参数为100MB(即1048576Bytes)

  如果NameNode存储其元数据信息的服务器上的可用空间低于"dfs.datanode.du.reserved"参数指定的阈值,则NameNode会立即进入安全模式。

  如果集群中大量DataNode发生故障,则Hadoop会立即将大量数据复制到集群中的其余DataNode。避免大规模数据复制的一个好方法是在安全模式下启动NameNode,然后再引导失败的DataNode。

 

三.NameNode如何进入安全模式

  下面描述了NameNode从安全模式转换到完全"打开"模式的过程。
    (1)当进入安全操作模式时,NameNode和Datanode都处于运行状态,NameNode读取更新的检查点信息以及初始化nameNode的命名空间;
    (2)NameNode重播编辑日志以及基于检查点信息创建新的命名空间;
    (3)NameNode创建一个新的检查点(即一个新的fsimage文件,它是前一个fsmage文件的压缩形式,以及从编辑日志应用的所有事务)并保存;
    (4)打开DataNode,NameNode Web UI和Secondary NameNode的端口开始通信;
    (5)NameNode进入安全模式,此时不执行HDFS读写操作;
    (6)NameNode退出安全模式,此时允许HDFS读取和写入;

  如果有大量的编辑日志,可能是因为Secondary NameNode已经丢失了一段时间,NameNode会在一段时间内保持安全模式状态。

  如果为fsimage文件配置了多个冗余存储位置,则NameNode以并行方式写入所有fsimage文件,但仍保持安全模式,直到完成所有位置写入。在那之前,不能有任何客户端连接到HDFS。

  可以通过NameNode Web UI,在NameNode启动时立即跟踪NameNode重新启动过程,UI会显示加载fsimage和编辑日志的完成百分比,如下图所示。
  
  博主推荐阅读:
    https://www.cnblogs.com/yinzhengjie2020/p/13363924.html

 

posted @ 2020-07-26 00:50  JasonYin2020  阅读(1259)  评论(0编辑  收藏  举报