如何减少HDFS目录中的复制因子及其影响

时间:2017-07-19 06:44:01

标签: hadoop hdfs hortonworks-data-platform

我们正在使用Hortonworks HDP 2.1(HDFS 2.4),复制因子为3。 我们最近退役了一个datanode,并在集群中留下了很多未复制的块。

群集现在正尝试通过在其他节点之间分发复制的块来满足复制因子。

  1. 如何停止该过程。我很好,有些文件只被复制了两次。如果我在该目录中将复制因子更改为2,那么该进程是否会终止?

  2. 对于包含3个副本的文件的目录,将复制因子设置为2的影响是什么。群集是否会启动另一个进程来删除每个文件的多余副本3个副本?

  3. 感谢您对此的帮助。请分享参考资料。 谢谢。 Sajeeva。

1 个答案:

答案 0 :(得分:2)

  

我们最近退役了一个datanode,并在集群中留下了很多未复制的块。

如果DataNode正常退役,那么它不应该导致未复制的块。但是,作为一种边缘情况,如果退出节点会将总节点数计入文件上设置的复制因子,那么根据定义,该文件的块将被低估复制。 (例如,考虑具有3个DataNode的HDFS集群。停用节点会导致剩余2个DataNode,因此现在复制因子为3的文件的块复制不足。)

在淘汰期间,HDFS将该DataNode上托管的块重新复制(复制)到群集中的其他DataNode,以便维护所需的复制因子。有关这方面的更多细节如下:

  
      
  1. 如何停止该过程。我很好,有些文件只被复制了两次。如果我在该目录中将复制因子更改为2,那么该进程是否会被终止?
  2.   

没有确定的方法来终止整个过程。但是,如果在某些未复制的文件上将复制因子降低到2,则NameNode将停止为这些文件的块安排重新复制工作。这意味着对于这些文件的块,HDFS将停止跨不同的DataNode复制新的副本。

从容错的角度来看,典型的复制因子3是理想的。您可以考虑将这些文件的复制因子设置回3以后。

  
      
  1. 对于包含3个副本的文件的目录,将复制因子设置为2会产生什么影响。群集是否会启动另一个进程来删除每个文件的多余副本3个副本?
  2.   

是的,NameNode会将这些文件标记为过度复制。作为响应,它将在DataNodes上安排块删除以恢复所需的复制因子2.这些块删除被异步调度到DataNode,以响应它们的心跳。在DataNode中,块删除以异步方式执行以清除磁盘中的底层文件。

有关此问题的更多详情,请参阅Apache Hadoop Wiki