hadoop集群长期待机,过程中由于硬盘快用了,导致集群进入安全模式,再次启动hive的时候出现以下错误提示:

Cannot create directory /tmp/hive/usr100/58b61340-fdb6-434c-be24-2f8f23fc524e. Name node is in safe mode.
Resources are low on NN. Please add or free up more resources then turn off safe mode manually. NOTE:  If you turn off safe mode before adding resources, the NN will immediately return to safe mode. Use "hdfs dfsadmin -safemode leave" to turn safe mode off.


翻译:不能创建目录“/tmp/hive/usr100/58b61340-fdb6-434c-be24-2f8f23fc524e”,因为名称节点处于安全模式。由于NN上资源太低,请增加或者释放更多资源后关闭安全模式。注意:如果你在增加资源之前推出安全模式,NN集群会立刻恢复到安全模式,使用“hdfs dfsadmin -safemode leave”可以推出安全模式。

bin/hadoop dfsadmin -safemode leave
//在bin下执行
//若配置了环境变量,使用以下命令
hadoop dfsadmin -safemode leave

执行结果:

用户可以通过dfsadmin -safemode value 来操作安全模式,参数value的说明如下:
enter - 进入安全模式
leave - 强制NameNode离开安全模式
get - 返回安全模式是否开启的信息
wait - 等待,一直到安全模式结束。

但是,正如翻译文里边说的一样,命令行并不能根本解决问题,根本原因是资源不足的问题任然没有解决,集群会一直自动进入安全模式。

我的主机是24核心e5双路,内存64g,硬盘512g,建立虚拟机的时候分配给master的硬盘空间只有30g,造成不足,通过在root账户输入命令df -h查看如下:

当硬盘使用超过90%时(上图已经达到100%),namenode就会进入安全模式,强制退出也不行。
发生这种情况,要么对硬盘扩容,要么删除硬盘中的某些文件,释放空间

我这里选择的第一种方法:关闭无用进程和删除冗余文件

(1)使用lsof |grep delete查看对应的进程号;

(2)另外输入lsof |grep top,查看后台所有进程,然后找到无用进程,也杀死这部分进程

但是磁盘占用没有什么变化,下一步删除冗余文件

删除冗余文件后:

退出root账户,重启集群,查看安全模式状态如下

大功告成。

另外也有网友尝试通过扩展来解决,可以参加他的博客:

https://blog.csdn.net/zengxianglei/article/details/104060878?utm_medium=distribute.pc_relevant_right.none-task-blog-BlogCommendFromBaidu-9&depth_1-utm_source=distribute.pc_relevant_right.none-task-blog-BlogCommendFromBaidu-9

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐