HDFS冗余數(shù)據(jù)塊的自動(dòng)刪除
在日常維護(hù)hadoop集群的過(guò)程中發(fā)現(xiàn)這樣一種情況:某個(gè)節(jié)點(diǎn)由于網(wǎng)絡(luò)故障或者DataNode進(jìn)程死亡抽活,被NameNode判定為死亡关筒,HDFS馬上自動(dòng)開(kāi)始數(shù)據(jù)塊的容錯(cuò)拷貝;當(dāng)該節(jié)點(diǎn)重新添加到集群中時(shí)驶睦,由于該節(jié)點(diǎn)上的數(shù)據(jù)其實(shí)并沒(méi)有損壞砰左,所以造成了HDFS上某些block的備份數(shù)超過(guò)了設(shè)定的備份數(shù)。通過(guò)觀察發(fā)現(xiàn)场航,這些多余的數(shù)據(jù)塊經(jīng)過(guò)很長(zhǎng)的一段時(shí)間才會(huì)被完全刪除掉缠导,那么這個(gè)時(shí)間取決于什么呢?該時(shí)間的長(zhǎng)短跟數(shù)據(jù)塊報(bào)告的間隔時(shí)間有關(guān)溉痢。Datanode會(huì)定期將當(dāng)前該結(jié)點(diǎn)上所有的BLOCK信息報(bào)告給Namenode僻造,參數(shù)dfs.blockreport.intervalMsec就是控制這個(gè)報(bào)告間隔的參數(shù)。hdfs-site.xml文件中有一個(gè)參數(shù):dfs.blockreport.intervalMsec3600000Determines block reporting interval in milliseconds.其中3600000為默認(rèn)設(shè)置孩饼,3600000毫秒髓削,即1個(gè)小時(shí),也就是說(shuō)镀娶,塊報(bào)告的時(shí)間間隔為1個(gè)小時(shí)立膛,所以經(jīng)過(guò)了很長(zhǎng)時(shí)間這些多余的塊才被刪除掉。通過(guò)實(shí)際測(cè)試發(fā)現(xiàn)梯码,當(dāng)把該參數(shù)調(diào)整的稍小一點(diǎn)的時(shí)候(60秒)宝泵,多余的數(shù)據(jù)塊確實(shí)很快就被刪除了。