以下情况会导致 HDFS 副本数高于设定值:
- 节点重新上线。这类操作是运维操作引起的,节点下线操作会导致大量此节点的 block 块在集群中拷贝(因为节点下线造成的副本数不足),一旦此节点取消下线,之前拷贝的大量块必然会成为多余的副本块
- 网络波动。namenode 启动时,会进入安全模式,数据节点上报数据块信息,若此时上报的数据块小于设置的阈值,namenode 会复制出足够的数据块。有可能原本的数据块充足,只是网络波动或其他情况造成集群中数据块过多
- 人为重新设置副本数。以 A 副本举例,A 副本当前满足标准副本数 3 个,此时用户使用
hadoop fs -setrep 1 PATH
将 A 的副本数设为 1,此时就会造成 A 的副本多余两个的情况,即便 HDFS 中的标准副本数还是 3
多余数据块之后需要被删除,此处选出多于数据块有两个原则:
数据块副本放置原则
以 3 副本为例,第一个副本会放置在提交数据的 datanode 上,为的是节省带宽;第二个副本会放置在和第一个副本不同机架的 DN 上,第三个副本会放置在和第二个副本相同机架的不同节点上,后续如果还有则随机放置
尽量删除剩余空间小节点上的数据块