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 |
可能的事故原因
如果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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。