首页 > 解决方案 > 在 HDFS 中上传期间可以读取数据吗?

问题描述

想象一下,XYZ 先生正在将一个 500MB 的文件上传到 Hadoop (HDFS) 中。100MB 数据成功上传到 Hadoop(HDFS) 中,作为客户端的 ABC 先生想在上传过程中读取上传的数据。在这种情况下会发生什么,上传的1000MB数据会显示出来吗?

标签: hadoophdfs

解决方案


做这样的事情。如果将一个 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,而另一个客户端即将读取上传的数据,而上传仍在进行中,那么只有当前块正在写入将不会对读者可见。


推荐阅读