共计 1143 个字符,预计需要花费 3 分钟才能阅读完成。
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 主要做这些事情。
- NameNode 从磁盘读取 FsImage 和 EditLog 的 xinxi,将 EditLog 中的所有事务应用到 FsImage 的内存中,并将这新版本的数据刷新到磁盘上的新 FsImage 中。
- 接收集群中的 DataNode 块报告。
安全模式结束的条件
NameNode 完成一部分比例 (可配置) 的数据检查再过 30s(可配置),NameNode 会自动退出 Safemode 状态。在 hdfs-site.xml
文件中配置。
配置项 | 注释 |
---|---|
dfs.safemode.threshold.pct | 指定退出条件,需要达到最小副本数的数据块比例,默认是 0.999 |
dfs.safemode.extension | 指定系统退出安全模式时需要的延迟时间,默认为 30s |
参考
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