【问题标题】:Why HDFS client caches the file data into a temporary local file?为什么 HDFS 客户端会将文件数据缓存到一个临时的本地文件中?
【发布时间】:2017-06-17 16:12:36
【问题描述】:

为什么HDFS客户端不能直接发送到DataNode?​​p>

HDFS 客户端缓存有什么优势?

  1. 创建文件的应用程序请求不会立即到达 NameNode。
  2. 其实一开始HDFS客户端会将文件数据缓存到一个临时的本地文件中。
  3. 应用程序写入透明地重定向到这个临时本地文件。
  4. 当本地文件积累了至少一个HDFS块大小的数据时,客户端联系NameNode创建文件。
  5. NameNode 然后按照创建部分中的描述继续。客户端将数据块从本地临时文件刷新到指定的DataNodes。
  6. 当一个文件被关闭时,临时本地文件中剩余的未刷新数据被传输到DataNode。
  7. 然后客户端告诉 NameNode 文件已关闭。
  8. 此时,NameNode 将文件创建操作提交到持久存储中。如果 NameNode 在文件关闭之前死亡,则文件丢失。

【问题讨论】:

    标签: hadoop caching hdfs


    【解决方案1】:

    听起来您正在引用 Apache Hadoop HDFS Architecture 文档,特别是标题为 Staging 的部分。不幸的是,这些信息已经过时,不再是对当前 HDFS 行为的准确描述。

    相反,客户端立即向 NameNode 发出create RPC 调用。 NameNode 在其元数据中跟踪新文件,并回复一组候选 DateNode 地址,这些地址可以接收块数据的写入。然后,客户端开始将数据写入文件。当客户端写入数据时,它是在与 DataNode 的套接字连接上写入数据。如果写入的数据大到足以跨越块大小边界,则客户端将再次与 NameNode 交互,以通过addBlock RPC 在 NameNode 元数据中分配新块并获取一组新的候选 DataNode 位置。客户端不会写入本地临时文件。

    但请注意,替代文件系统(例如与 Amazon S3 集成的 S3AFileSystem)可能支持缓冲到磁盘的选项。 (如果您对这方面的更多详细信息感兴趣,请参阅Integration with Amazon Web Services 的 Apache Hadoop 文档。)

    我已提交 Apache JIRA HDFS-11995 以跟踪更正文档。

    【讨论】:

      猜你喜欢
      • 2010-12-18
      • 2021-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-06
      相关资源
      最近更新 更多