【问题标题】:When does a HDFS File becomes visibleHDFS 文件何时可见
【发布时间】:2014-05-11 14:05:11
【问题描述】:

假设默认 Hadoop 设置,如果我将 128 MB 大小的文件写入 HDFS。客户端需要将 2 个块写入 HDFS。所以我的问题是

  1. 第一个块写入 HDFS 后,文件是否可供他人读取,还是必须等待第二个块也写入?

第二个场景,文件大小为 64 MB,
2. 有人可以读取当前写入 HDFS 的块吗?或者有人必须等待写入完成。

【问题讨论】:

  • 好的策略是将文件写入临时文件夹,然后将其移动到目标目录。在其他情况下,可以在文件完全写入之前读取文件。

标签: file hadoop hdfs


【解决方案1】:

HDFS 以块的形式思考。
因此,如果您的文件由 2 个块组成,并且您的一个块已写入,则您可以读取该块。但是,由于它只是文件的一个块而不是整个文件,因此您必须在 dfs.data.dir 中搜索它并使用 hadoop dfs -text 来读取它。或者你可以去namenode UI阅读。

第二个问题 - 不,您无法读取当前正在写入的块。它不会对读者可见。

【讨论】:

    【解决方案2】:

    一般来说,当您写入 HDFS 时,一旦写入了超过一个块的价值数据,第一个块将对新的读取器可见。对于后续块也是如此。始终写入当前块,即其他读者看不到。但是,您可以使用 FSDataOutputStream.sync() 强制所有缓冲区同步到数据节点。在 sync() 返回成功后,写入到该点的数据保证对所有新读者可见。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多