关于Hadoop数据块Miss在页面提示的问题

这个文档转至台湾的已了论坛,地址是:http://hadoop.nchc.org.tw/phpbb/viewtopic.php?f=4&t=1938

 

請教一個hadoop運行維護中的問題:

背景:
調整hadoop配置:
1. hadoop的dfs.replication之前設置為1,現在改為3;
2. 去掉一個節點,增加6個節點。

現狀
50070頁面出現提示:
WARNING : There are about 900 missing blocks. Please check the log or run fsck.
運行hadoop fsck /
提示很多block corrupt/missing,以及:

代碼:
Total size:    365964738251 B
Total dirs:    109
Total files:   3620
Total blocks (validated):      7945 (avg. block size 46062270 B)
  ********************************
  CORRUPT FILES:        161
  MISSING BLOCKS:       887
  MISSING SIZE:         52060391642 B
  CORRUPT BLOCKS:       887
  ********************************
Minimally replicated blocks:   7058 (88.83575 %)
Over-replicated blocks:        0 (0.0 %)
Under-replicated blocks:       0 (0.0 %)
Mis-replicated blocks:         0 (0.0 %)
Default replication factor:    3
Average block replication:     1.0902455
Corrupt blocks:                887
Missing replicas:              0 (0.0 %)
Number of data-nodes:          15
Number of racks:               1


The filesystem under path '/' is CORRUPT

 



問題
1. dfs.replication從1改為3時,怎麼可以把原來的block都升級為3個呢?新寫入的文件都是3,但舊有的仍然為1;
2. 如果那些missing的block已經沒有用處,不需要恢復,怎麼能使得hadoop fsck檢查結果為HEALTHY呢?
3. 如果想要恢復missing的block,該怎麼做呢?

 

回答

1. 過一段時間 NameNode 自然會檢查 replication 數是否低於副本策略(3份),重點是您必須重新啟動 NameNode 的 process,副本策略才會生效。
2. hadoop fsck -delete 可以移除 missing block
hadoop fsck -move 會把有錯誤的檔案移到 HDFS 的 /lost+found
3. 就要看那幾個 block 是否還有存在某幾台 DataNode 的 ${dfs.data.dir} 目錄中了

 

多謝Jazz老師的解答!
關於第一個問題,確實已經做過重啟namenode的操作,但目前看到的現象還是沒有變化,新寫入的文件replication為3,舊有文件的還是1。這個可能是什麽原因導致的呢?

 

嗯,應該是先前的 metadata 的紀錄是 replication = 1
請手動設定為 3。

代碼:
hadoop fs -setrep -R -w 3 /
非常感謝Jazz老師的解答,確實這樣操作就可以了,感謝感謝!!
查了一下相關的說明:http://hadoop.apache.org/common/docs/r0.19.2/cn/hdfs_design.html上有提到:
减少副本系数
当一个文件的副本系数被减小后,Namenode会选择过剩的副本删除。下次心跳检测时会将该信息传递给Datanode。Datanode遂即移除相应的数据块,集群中的空闲空间加大。同样,在调用setReplication API结束和集群中空闲空间增加间会有一定的延迟。

 

 

你可能感兴趣的:(Hadoop)