目前来看,致使hdfs一直处于safemode模式最直接的缘由是已成功复制的块的比例没有达到默认值,块的损坏也会形成一直处于安全模式。安全
1)文件系统中有损坏的文件,使用fsck命令来查看oop
hadoop fsck /
以上是查看hdfs的根目录下的全部文件健康情况,若是有损坏的文件,就会提示:命令行
The filesystem under path '/' is CORRUPT(损坏)
接下来就是排错,查看到底是哪一个目录下有损坏文件,使用fsck遍历检查根目录下的每一个子目录,查看时候有损坏文件,例如查看user目录:3d
hadoop fsck /user
找到损坏的文件,删除掉便可,最终在使用fsck检查hdfs文件系统已无缺:code
可是看到Missing replicas一栏中,有321个副本丢失了,好比某个文件的复制因子是3,结果只有2个,那么表示有1个副本丢失了,全部的文件丢失副本数以后就是Missing replicas。一样使用fsck遍历全部目录,查看到底是那些文件的冗余数量不够。blog
首先查看/user/Englishinput,命令以下:hadoop
hadoop fsck /user/EnglishInput -files -blocks -locations
仅仅这一个目录就有265个备份丢失,删除此目录。input
Under开头的记录就是异常块的状况,数字.开头的就是正常的块状况。io
2)如下就是hdfs正常状况的形式:class
红色的箭头表示对一个文件的检查状况:1 block(s)表示这个文件只由一个块组成,ok表示文件处于正常状态。
蓝色箭头指示了“Average block replication”块平均复制因子2.8,由于其中有一个文件传到集群上是系统配置的复制因子是1,所以其复制因子是1,才致使平均复制因子是1.
3)修改配置文件中的复制因子值,并不会改变修改以前集群中文件的复制因子,必须重启hadoop才能使其生效。也可使用命令行的方式修改,不用从新启动便可生效,不过依然不会修改以前文件的复制因子。
4)使用第二种方法的结果以下所示;