hadoop解除safemode-安全模式

火山日常啰嗦
今天想删除hdfs上的某个目录时,总是报错,苦恼了很久才解决。

烦恼是一定会有的,但不能一直烦恼下去,因为问题总要解决的。后来我静下心,仔细查看日志中的错误信息,发现报的是这样的错误:
org.apache.hadoop.dfs.SafeModeException: Cannot delete /user/hadoop/input. Name node is in safe mode
这个错误意思是说namenode节点当前处于安全模式,此时不能对hdfs上的数据进行修改。

了解了问题发生的原因后,我就循着这个方向google查找解决方法,大部分的解决方法都是说,集群启动后都会先进入安全模式,这种情况下只要等待一会儿就可以自动退出安全模式了,然而等了挺长一段时间之后再次请求写任务,依然报错。

既然等解决不了问题,我就尝试强制退出安全模式,shell中执行:

hdfs dfsadmin -safemode leave

就可以强制退出安全模式。

hdfs dfsadmin -safemode value
value有四种选择:
enter 进入安全模式
get 获取安全模式的状态
leave 强制退出安全模式
wait 等待安全模式结束

我就执行了

hdfs dfsadmin -safemode leave

执行结果显示safemode is off
然后执行

hdfs dfsadmin -safemode get

查看namenode安全模式状态,又变成safemode is on 了,刚才不还是off吗,不是退出了吗?怎么又这样呢?

百思不得其姐,后来查到一篇文章里说到当硬盘使用超过90%时,namenode就会进入安全模式,强制退出也不行。

发生这种情况,要么对硬盘扩容,要么删除硬盘中的某些文件,释放空间。

我刹那间像是看到了曙光一般,因为我有一次为了模拟数据倾斜,向hdfs上传了多个大小为3G的文件,所以该问题很有可能就是磁盘使用过度导致的,但由于此时namenode处于safemode,我想删除hdfs上的数据也行不通(namenode处于安全模式是无法执行写任务的),又不想扩容,所以我最后就选择了使用虚拟机快照功能将节点恢复到上一次生成快照时的状态。
ps:我这只是不得已而为之,这种办法不推荐的(这种感觉就跟恢复系统出厂设置一样,所以不推荐哈)。

恢复后等了一会儿后执行hdfs dfsadmin -safemode get查看状态,真的退出了,果然正确,就是硬盘空间使用过度导致的安全模式无法退出。

一般情况下安全模式是可以等待它自动退出或者强制退出的,因为namenode启动后要加载元数据信息到内存,所以都会进入safemode的状态,当集群准备好了之后,就会退出safemode了。

    原文作者:火山Vol
    原文地址: https://www.jianshu.com/p/de308d935d9b
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞