我们正在使用Hortonworks HDP 2.1(HDFS 2.4),复制因子为3。 我们最近退役了一个datanode,并在集群中留下了很多未复制的块。
群集现在正尝试通过在其他节点之间分发复制的块来满足复制因子。
如何停止该过程。我很好,有些文件只被复制了两次。如果我在该目录中将复制因子更改为2,那么该进程是否会终止?
对于包含3个副本的文件的目录,将复制因子设置为2的影响是什么。群集是否会启动另一个进程来删除每个文件的多余副本3个副本?
感谢您对此的帮助。请分享参考资料。 谢谢。 Sajeeva。
答案 0 :(得分:2)
我们最近退役了一个datanode,并在集群中留下了很多未复制的块。
如果DataNode正常退役,那么它不应该导致未复制的块。但是,作为一种边缘情况,如果退出节点会将总节点数计入文件上设置的复制因子,那么根据定义,该文件的块将被低估复制。 (例如,考虑具有3个DataNode的HDFS集群。停用节点会导致剩余2个DataNode,因此现在复制因子为3的文件的块复制不足。)
在淘汰期间,HDFS将该DataNode上托管的块重新复制(复制)到群集中的其他DataNode,以便维护所需的复制因子。有关这方面的更多细节如下:
- 如何停止该过程。我很好,有些文件只被复制了两次。如果我在该目录中将复制因子更改为2,那么该进程是否会被终止?
醇>
没有确定的方法来终止整个过程。但是,如果在某些未复制的文件上将复制因子降低到2,则NameNode将停止为这些文件的块安排重新复制工作。这意味着对于这些文件的块,HDFS将停止跨不同的DataNode复制新的副本。
从容错的角度来看,典型的复制因子3是理想的。您可以考虑将这些文件的复制因子设置回3以后。
- 对于包含3个副本的文件的目录,将复制因子设置为2会产生什么影响。群集是否会启动另一个进程来删除每个文件的多余副本3个副本?
醇>
是的,NameNode会将这些文件标记为过度复制。作为响应,它将在DataNodes上安排块删除以恢复所需的复制因子2.这些块删除被异步调度到DataNode,以响应它们的心跳。在DataNode中,块删除以异步方式执行以清除磁盘中的底层文件。
有关此问题的更多详情,请参阅Apache Hadoop Wiki。