Hadoop的安全模式

Error

The number of live datanodes 0 has reached the minimum number 0. Safe mode will be turned off automatically once the thresholds have been reached. NamenodeHostName:XXX

原因

Hadoop的安全模式下,不能写hdfs的文件,只能查看。如果在此时启动了hive或者别的可能造成写hdfs的程序,会导致 SafeModeException 错误。

解决方法:

判断是否处于安全模式 - hadoop dfsadmin -safemode get
退出安全模式 - hadoop dfsadmin -safemode leave
强制退出安全模式 hadoop dfsadmin -safemode forceExit

为什么会有安全模式

当 Hadoop的NameNode节点启动时,会进入安全模式阶段。在此阶段,DataNode会向NameNode上传它们数据块的列表,让 NameNode得到块的位置信息,并对每个文件对应的数据块副本进行统计。当最小副本条件满足时,即一定比例的数据块都达到最小副本数,系统就会退出安全模式,而这需要一定的延迟时间。当最小副本条件未达到要求时,就会对副本数不足的数据块安排DataNode进行复制,直至达到最小副本数。而在安全模式下,系统会处于只读状态,NameNode不会处理任何块的复制和删除命令。

在安全模式期间,Hadoop主要做这些事情。

  1. NameNode从磁盘读取FsImage和EditLog的xinxi,将EditLog中的所有事务应用到FsImage的内存中,并将这新版本的数据刷新到磁盘上的新FsImage中。
  2. 接收集群中的DataNode块报告。

安全模式结束的条件

NameNode完成一部分比例(可配置)的数据检查再过30s(可配置),NameNode会自动退出Safemode状态。在 hdfs-site.xml 文件中配置。

配置项 注释
dfs.safemode.threshold.pct 指定退出条件,需要达到最小副本数的数据块比例,默认是0.999
dfs.safemode.extension 指定系统退出安全模式时需要的延迟时间,默认为30s

可能的事故原因

如果namenode长时间处于安全模式,那么多半是因为hdfs的数据损坏的太多。
此时可以用命令 hadoop fsck / 检查 hdfs文件的情况。
具体细节参考这篇博客https://www.cnblogs.com/lz3018/p/4974416.html

参考

Hadoop的配置项可以查看这份文档,选择自己对应的版本:
https://hadoop.apache.org/docs/r3.2.0/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

也可以参考这篇国外博客:
https://netjs.blogspot.com/2018/02/what-is-safemode-in-hadoop-hdfs.html


bingo
16 声望5 粉丝