本文参考:
https://www.jianshu.com/p/4e4316ae0e17
https://www.jianshu.com/p/5ef70a66019a
在日常维护Hadoop集群的过程中,发现一种情况(Block 默认3):某节点由于网络故障或者DataNode进程的死亡,被NameNode判定为死亡(此时位2),HDFS马上自动开始数据块的容错拷贝(从2到3)。当该节点重新添加到集群中时(从3到4),由于该节点上的数据没有损坏,所以造成了HDFS上的某些Block的备份数超过设定的数目。
通过观察发现,这些多余的数据块经过很长的一段时间才会被完全删除掉。那么这个时间取决于什么呢?
该时间的长短跟数据块报告的时间间隔有关。DataNode会周期性的发送“心跳”信息,发送给NameNode,并携带所有的块信息。参数
<property><name>dfs.blockreport.intervalMsec</name><value>3600000</value><description>Determines block reporting interval in milliseconds.</description>
</property>
其中,360000为默认设置,360000毫秒。即一小时,也就是说一小时为一个时间间隔去删除冗余的副本数据。可以设置其时间间隔,来调整处理冗余数据的时间。