A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

最近学习hadoop有小伙伴配置期间打不开hive,被困扰很久,逐个配置文件检查整合互联网资源写下这篇帖子,主要步骤参考_火山的文章。首先仔细查看日志中的错误信息,发现报的是这样的错误:
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了。

2 个回复

倒序浏览
一个人幸运的前提,其实是他有能力改变自己。嗯,来到这里的我们都是幸运的吧?
回复 使用道具 举报
面对生活的选择,可怕的不是“大环境”,而是我们自己。勇于走出自己的舒适圈,勇于挑战自己,加油……
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马