NameNode只需等待最小复制块,然后成功返回

时间:2019-03-22 07:00:21

标签: hadoop hdfs client namenode

我对客户端写入HDFS时从DataNode发送到NameNode的阻止报告以及从NameNode到客户端有关关闭文件的确认有疑问。

有人可以详细说明Hadoop的这一段:

  

“当客户端完成数据写入后,它会在客户端上调用close()   流。此操作将所有剩余的数据包刷新到数据节点   管道,并在联系namenode之前等待确认   表示文件已完成。名称节点已经知道哪个   由文件组成的块,因此它只需要等待块被   成功返回之前最少复制。”

“成功返回”是模棱两可的:可能意味着已成功返回给客户(但是要等到几个小时后才能收到下一个阻止报告,这对我来说没有意义),或者这可能意味着在几个小时后成功但异步地在NameNode上本地返回,而无需客户端等待。

该问题与讨论here稍有关系,在讨论{HD3 async或sync中,有评论询问是否写入。

  • 例如,在 async 的情况下,这意味着close()调用立即返回到客户端,并且NameNode之后异步检查复制;
  • sync 的情况下,这意味着NameNode必须等待DataNodes的阻止报告,然后才能向客户端确认文件close()。

在先前的讨论中,另一条评论指向对此source进行澄清,并在其中指出

  

“对complete()的调用直到所有文件块都不会返回true   已被复制最少次数。因此,DataNode   失败可能导致客户端多次调用complete()   成功”。

此信息源倾向于选择同步解释。

如果Hadoop工程师可以对此提供建议,我将非常感激。提前非常感谢您。

0 个答案:

没有答案