hdfs 安全模式及解决

一  安全模式

NameNode在重启的时候,DataNode需要向NameNode发送块的信息,NameNode只有获取到整个文件系统中有99.9%(可以配置的)的块满足最小副本才会自动退出安全模式。最小副本和那个99.9%阀值可以通过下面配置来设定:

<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.safemode.threshold-pct参数的意思是指定达到最小副本数的数据块的百分比。这个值小等于0表示无须等待就可以退出安全模式;而如果这个值大于1表示永远处于安全模式。除了上面两个参数对安全模式有影响之外,下面几个参数也会对安全模式有影响

<property>

  <name>dfs.namenode.safemode.min.datanodes</name>

  <value>0</value>

  <description>

    Specifies the number of datanodes that must be considered alive

    before the name node exits safemode.

    Values less than or equal to 0 mean not to take the number of live

    datanodes into account when deciding whether to remain in safe mode

    during startup.

    Values greater than the number of datanodes in the cluster

    will make safe mode permanent.

  </description>

</property>

 

<property>

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

  <value>30000</value>

  <description>

    Determines extension of safe mode in milliseconds

    after the threshold level is reached.

  </description>

</property>

  dfs.namenode.safemode.min.datanodes的意思指namenode退出安全模式之前有效的(活着的)datanode的数量。这个值小等于0表示在退出安全模式之前无须考虑有效的datanode节点个数,值大于集群中datanode节点总数则表示永远处于安全模式;dfs.namenode.safemode.extension表示在满足dfs.namenode.safemode.threshold-pct值之后,NameNode还需要处于安全模式的时间(单位是秒)。源代码截图

(1)上述代码截图中的 blockSafe 根据截图二中的注释可知,当该块满足最小副本数时,进行++操作,

(2)blockThreshold ,在源码中有这样一段  this.blockThreshold = (int) (blockTotal * threshold);表明该数量为总数据块乘以dfs.namenode.safemode.threshold-pct 这个值得到的。

(3)根据1(needEnter()) 中的判断条件可知,设置的参数不等于0;满足最小副本块的个数少于设置参数(默认0.999)乘以总块数的个数;最小活着的datanode数小于设置的阈值(默认0);没有足够的磁盘空间(默认100M) 上述条件满足其一就会进入安全模式。

 

  当然,如果我们也可以手动进入安全模式

hadoop fs –safemode enter

手动进入安全模式对于集群维护或者升级的时候非常有用,因为这时候HDFS上的数据是只读的。手动退出安全模式可以用下面命令:

hadoop fs –safemode leave

如果你想获取到集群是否处于安全模式,可以用下面的命令获取:

hadoop fs –safemode get

当然,你也可以在NameNode的50070端口的WEB页面上看到集群是否处于安全模式。

二  解决安全模式

1 hdfs fsck /

 

对丢失的快进行删除,上述是清理完的截图,状态为HEALTHY

2  调整参数(测试环境可以设置为0,永不进入安全模式)

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

  <value>0</value>

3  检查磁盘剩余量

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值