我对客户端写入HDFS时从DataNode发送到NameNode的阻止报告以及从NameNode到客户端有关关闭文件的确认有疑问。
有人可以详细说明Hadoop的这一段:
“当客户端完成数据写入后,它会在客户端上调用close() 流。此操作将所有剩余的数据包刷新到数据节点 管道,并在联系namenode之前等待确认 表示文件已完成。名称节点已经知道哪个 由文件组成的块,因此它只需要等待块被 成功返回之前最少复制。”
“成功返回”是模棱两可的:可能意味着已成功返回给客户(但是要等到几个小时后才能收到下一个阻止报告,这对我来说没有意义),或者这可能意味着在几个小时后成功但异步地在NameNode上本地返回,而无需客户端等待。
该问题与讨论here稍有关系,在讨论{HD3 async或sync中,有评论询问是否写入。
在先前的讨论中,另一条评论指向对此source进行澄清,并在其中指出
“对complete()的调用直到所有文件块都不会返回true 已被复制最少次数。因此,DataNode 失败可能导致客户端多次调用complete() 成功”。
此信息源倾向于选择同步解释。
如果Hadoop工程师可以对此提供建议,我将非常感激。提前非常感谢您。