希望多多指导,qq 86497564 。

© 天行自息
Powered by LOFTER

安全模式

namenode启动时,首先将映像文件(fsiamge)载入内存,并重新编辑日志中的各项操作。一旦在内存中成功建立文件系统元数据的映像,则创建一个新的fsimage文件(该操作不需要借助namenode)和一个空的编辑日志。此时,namenode开始监听rpc和http请求。但是此刻namenode运行在安全模式,即namenode的文件系统对于客户端来说是只读的。(只有访问文件系统操作时肯定成功执行的,对于读文件操作,只有集群中当前的datanode上的块可用,才能工作。但文件修改操作,包括写、删或重命名均会失败)在安全模式下namenode并不向datanode发出任何块复制或删除的指令,如果满足"最小副本条件"。namenode会在30秒钟后就退出安全模式,启动一个刚格式化的HDFS集群时,因系统中还没任何块,所以namenode不会进入安全模式。

    安全模式主要是为了系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略必要的复制或者删除部分数据块。

安全模式命令:

    hdfs dfsadmin -safemode get 显示是否处于安全模式

    hdfs dfsadmin -safemode wait 一直等到某条命令到来之前才退出安全模式

    hdfs dfsadmin -safemode enter 进入安全模式

    hdfs dfsadmin -safemode leave 离开安全模式

安全模式配置(hdfs-site.xml):

        <name>dfs.namenode.replication.min</name>

        </value>1</value>

        默认1,成功执行写操作所需创建的最小副本数(也成最小副本数级别)

        <name>dfs.namenode.safemode.threshold-pct</name>

        <value>0.999f</value>

        默认值0.999,在namenode退出安全模式之前,系统中满足最小副本级别(由dfs.replication.min定义)的块的比例。这个值小等于0表示无须等待就可以退出安全模式;而如果这个值大于1表示永远处于安全模式。

         Namenode 在重启的时候,DataNode需要向NameNode发送块的信息,Namenode只有获取到整个文件系统中有99.9%的块满足最小副本才会自动退出安全模式。假设我们设置的副本数(即参数dfs.replication)是5,那么在打他Node上就应该有5个副本存在,假设只存在3个副本,那么比率就是3/5=0.6。我们的副本率0.6明显小于0.999,因此系统会自动的复制副本到其他的datanode,争取是的最小副本率>=0.999。如果系统中有8个副本,超过我们设定的5个副本,那么系统也会删除多于的3个副本

<name>dfs.namenode.safemode.extension</name>

<value>3000</value>

 默认值30000,在满足最小副本条件之后,namenode还需处于安全模式的时间,(以毫秒为单位),对于小型集群可设为0.

    

   
评论
热度 ( 2 )