目前來看,導致hdfs一直處於safemode模式最直接的原因是已成功復制的塊的比例沒有達到默認值,塊的損壞也會造成一直處於安全模式。
1)文件系統中有損壞的文件,使用fsck命令來查看
hadoop fsck /
以上是查看hdfs的根目錄下的所有文件健康狀況,如果有損壞的文件,就會提示:
The filesystem under path '/' is CORRUPT(損壞)
接下來就是排錯,查看究竟是哪個目錄下有損壞文件,使用fsck遍歷檢查根目錄下的每個子目錄,查看時候有損壞文件,例如查看user目錄:
hadoop fsck /user
找到損壞的文件,刪除掉即可,最終在使用fsck檢查hdfs文件系統已完好:
但是看到Missing replicas一欄中,有321個副本丟失了,比如某個文件的復制因子是3,結果只有2個,那么表示有1個副本丟失了,所有的文件丟失副本數之后就是Missing replicas。同樣使用fsck遍歷所有目錄,查看究竟是那些文件的冗余數量不夠。
首先查看/user/Englishinput,命令如下:
hadoop fsck /user/EnglishInput -files -blocks -locations
僅僅這一個目錄就有265個備份丟失,刪除此目錄。
Under開頭的記錄就是異常塊的情況,數字.開頭的就是正常的塊情況。
2)以下就是hdfs正常情況的形式:
紅色的箭頭表示對一個文件的檢查情況:1 block(s)表示這個文件只由一個塊組成,ok表示文件處於正常狀態。
藍色箭頭指示了“Average block replication”塊平均復制因子2.8,因為其中有一個文件傳到集群上是系統配置的復制因子是1,因此其復制因子是1,才導致平均復制因子是1.
3)修改配置文件中的復制因子值,並不會改變修改之前集群中文件的復制因子,必須重啟hadoop才能使其生效。也可以使用命令行的方式修改,不用重新啟動即可生效,不過依然不會修改之前文件的復制因子。
4)使用第二種方法的結果如下所示;