HDFS安全模式(NameNode安全模式)实验

时间:2024-11-15 22:12:01

实验目的:

实验一:验证NameNode启动时确实会进入安全模式,检查数据块的完整性,如果数据块是完整的,会退出安全模式,正常响应读写请求

实验二:验证NameNode启动时确实会进入安全模式,如果未达到配置文件规定个数的DataNode启动,会一直处于安全模式,直到达到规定个数的DataNode都启动后,才会退出安全模式

实验三:验证在NameNode进程运行过程中,如果突然出现了datanode进程挂掉或数据块不完整,是否能重新进入安全模式?

试验环境:

3个节点组成的简单分布式集群,1个NameNode,2个DataNode

修改配置:

在master主机的配置文件中增加以下参数:

文件路径是/usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop/hdfs-

<property>
    <name> </name>
    <value>2</value>
</property>

参数含义::表示离开安全模式的最小可用 datanode 数量要求,默认为 0,即使所有 datanode 都不可用,仍然可以离开安全模式,因此设置为2,必须两个datanode可用才退出安全模式

 

实验步骤:

实验一:

1)先不启动hdfs集群(如果hdfs已经启动,执行停止集群),在master和slave1,slave2,运行查看安全模式命令hadoop dfsadmin -safemode get,出现结果都是:

safemode: Call From master/192.168.56.10 to master:9000 failed on connection exception: : 拒绝连接; For more details see:  /hadoop/ConnectionRefused

说明namenode进程没有启动,查看安全模式命令是无效的,安全模式本质上是namenode的安全模式

2)在任意节点运行脚本来启动集群,同时立即在另外一个节点多次尝试运行命令hadoop dfsadmin -safemode get来检查安全模式,输出结果:

[root@slave1 sbin]# hadoop dfsadmin -safemode get
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.
safemode: Call From slave1/192.168.56.11 to master:9000 failed on connection exception: : 拒绝连接; For more details see:  /hadoop/ConnectionRefused

[root@slave1 sbin]# hadoop dfsadmin -safemode get
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.
Safe mode is ON
[root@slave1 sbin]# jps
4119 DataNode
4265 SecondaryNameNode
4442 Jps
[root@slave1 sbin]# hadoop dfsadmin -safemode get
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.
Safe mode is OFF

实验一结论:证明namenode启动后,确实先会处于安全模式,大约过了几十秒后,会退出安全模式,能够正常读写

 

实验二:

1)执行停止整个hdfs集群运行(每台主机的所有进程都停掉),在master运行 start namenode命令,先只启动NameNode进程

2)运行查看安全模式命令hadoop dfsadmin -safemode get,都会输出Safe mode is ON

3)在slave1运行 start datanode,启动第1个datanode,再运行查看安全模式命令hadoop dfsadmin -safemode get,仍会输出Safe mode is ON

4)在slave2运行 start datanode,启动第2个datanode,再运行查看安全模式命令hadoop dfsadmin -safemode get,会输出Safe mode is OFF

实验二结论:证明NameNode进程启动后,确实先会处于安全模式,达到配置参数所表示的退出安全模式的最小可用 DataNode数量要求2后,才退出安全模式

实验三:

第一种情况:hdfs集群正常运行过程中,突然出现了datanode节点挂掉

1)构造datanode节点挂掉的情况,slave1和slave2两个主机执行kill命令杀掉datanode进程,用来模拟datanode节点挂掉的情况

2)过了数分钟后,执行检查安全模式命令 hadoop dfsadmin -safemode get,一直输出Safe mode is OFF

第二种情况:hdfs集群正常运行过程中,突然出现了数据块损坏

1)构造datanode数据块的不完整性:修改slave1或slave2主机本地文件系统上存放数据块的目录名  mv /root/hdfs/tmp  /root/hdfs/tmp1

2)过了数分钟后,执行检查安全模式命令 hadoop dfsadmin -safemode get,一直输出Safe mode is OFF

3)用kill命令杀掉slave1和slave2上的datanode进程,再次尝试执行检查安全模式命令 hadoop dfsadmin -safemode get,仍然一直输出Safe mode is OFF

实验三结论:证明NameNode只有启动时会进入安全模式,如果已经退出安全模式,即使所有的数据块都丢失,或者所有DataNode进程都挂掉,NameNode都不会再次进入安全模式

补充实验:

hdfs集群正常运行过程中,突然出现了NameNode的元数据的持久化镜像文件损坏

1)构造NameNode元数据的不完整性:修改master主机本地文件系统上存放元数据fsimage镜像的目录名  mv /root/hdfs/tmp  /root/hdfs/tmp1

2)立即执行检查安全模式命令 hadoop dfsadmin -safemode get,会立即输出Safe mode is ON

补充实验结论:证明NameNode即使退出安全模式,如果出现了元数据的持久化镜像文件都丢失,NameNode会立即再次进入安全模式

===========================理论说明=========================

与安全模式相关的参数在配置文件 中,主要有以下几个关键参数:

: 每个数据块最小副本数量,默认为 1. 在上传文件时,达到最小副本数,就认为上传是成功的。

-pct: 达到最小副本数的数据块的百分比。默认为0.999f。当小于这个比例,那就将系统切换成安全模式,对数据块进行复制;当大于该比例时,就离开安全模式,说明系统有足够的数据块副本数,可以对外提供服务。小于等于 0 意味不进入安全模式,大于 1 意味一直处于安全模式。

: 离开安全模式的最小可用 datanode 数量要求,默认为 0.也就是即使所有 datanode 都不可用,仍然可以离开安全模式。

: 当集群可用 block 比例,可用 datanode 都达到要求之后,如果在 extension 配置的时间段之后依然能满足要求,此时集群才离开安全模式。单位为毫秒,默认为 30000.也就是当满足条件并且能够维持 30 秒之后,离开安全模式。这个配置主要是对集群稳定程度做进一步的确认。避免达到要求后马上又不符合安全标准。

NameNode要离开安全模式,需要满足以下条件:

1)达到副本数量要求的数据块比例满足配置文件的要求;

2)可用的 DataNode节点数满足配置文件的数量要求;

3) 1、2 两个条件满足后维持的时间达到配置的要求