Hadoop集群启动的时候一切正常,但一直处于safemode,只能读不能写,这种时候应该查看namenode的logs,当然这可能会出现不同的情况... 下面仅介绍一种错误处理方案,希望能抛砖引玉,能对大家有所启发。
以下是日志提示(此地只摘抄了重要部分)
org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot delete /home/hadoop/tmp/mapred/system. Name node is in safe mode.
The ratio of reported blocks 0.0000 has not reached the threshold 0.9990. Safe mode will be turned off automatically.
The ratio of reported blocks 0.0000 has not reached the threshold 0.9990. Safe mode will be turned off automatically.
解决方案:
1:终极办法强制退出安全模式(safemode) hadoop dfsadmin -safemode leave 这种方式虽然快,但会有遗留问题,我在用habse的时候就遇到过,很麻烦,然后你就用“hadoop fsck /”工具慢慢恢复吧。
2:删除namenode下/home/hadoop/tmp下的所有文件,重新format,当然这种方式非常暴力,因为你的数据完全木有了(对于format后可能会遇到的问题我的另一篇文章 http://blog.csdn.net/rzhzhz/article/details/7056812 有提到)
3:参考源码可发现这个错误是在检查file的时候抛出来的,基本也就是file的block丢失、错误等原因造成的。这种情况在副本数为1的情况下会很棘手,其他的时候hadoop基本能自行解决,错误数很多的情况下就会一直处于safemode下,当然你可以强制离开安全模式,先保证正常读写,然后再启用“hadoop fsck /”工具慢慢修复。
关于集群修改配置文件后的分发,本人写了一个配置文件分发工具http://blog.csdn.net/rzhzhz/article/details/7056775,希望能给大家带来便利。