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 ~]#