这个文档转至台湾的已了论坛,地址是: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结束和集群中空闲空间增加间会有一定的延迟。