我们正在使用具有复制因子3的Hortonworks HDP 2.1(HDFS 2.4)。我们最近退役了一个数据节点,并且在集群中留下了许多未复制的块。
Cluster现在试图通过在其他节点之间分布复制块来满足复制因子。
感谢您对此的帮助。请分享参考资料。谢谢。 Sajeeva。
我们最近退役了一个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中有所描述。