【发布时间】:2020-07-14 04:42:48
【问题描述】:
想象一下,XYZ 先生正在将一个 500MB 的文件上传到 Hadoop (HDFS) 中。 100MB 数据成功上传到 Hadoop(HDFS),作为客户端的 ABC 先生想在上传过程中读取上传的数据。在这种情况下会发生什么,上传的1000MB的数据会显示出来吗?
【问题讨论】:
想象一下,XYZ 先生正在将一个 500MB 的文件上传到 Hadoop (HDFS) 中。 100MB 数据成功上传到 Hadoop(HDFS),作为客户端的 ABC 先生想在上传过程中读取上传的数据。在这种情况下会发生什么,上传的1000MB的数据会显示出来吗?
【问题讨论】:
做这样的事情。 如果将一个 500MB 的文件上传到 HDFS。如果 100MB 的数据已经在 HDFS 中成功上传,而另一个客户端即将读取上传的数据,而上传仍在进行中。那么会发生什么呢?上传的那100MB数据是否会显示? Hadoop1x 的默认块大小为 64MB,Hadoop2x 的默认块大小为 128MB。
让block-size为100MB,即5个block要复制3次(默认replication-factor)
以下过程描述了如何在 HDFS 中写入块:
如果我们将 A、B、C、D 和 E 作为客户端、文件、名称节点和数据节点的五个块。然后首先,客户端获取块 A 并接近名称节点以获取数据节点位置,以便存储当前块和它的复制副本。一旦数据节点信息可供客户端使用,他将直接到达数据节点并开始复制块 A,同时将复制到第二个数据节点。当块被复制并复制到数据节点时,块A存储的确认将到达客户端,然后客户端将重新启动下一个块即块B的相同过程。
因此,如果一个客户端正在将 500MB 的文件上传到 HDFS,其中 100MB 的数据已成功上传到 HDFS,而另一个客户端即将读取上传的数据,而上传仍在进行中,则只有正在写入的当前块对读者是不可见的。
【讨论】: