为什么HDFS客户端将文件数据缓存到临时本地文件中?

时间:2017-06-17 16:12:37

标签: hadoop caching hdfs

为什么HDFS客户端无法直接发送到DataNode?

HDFS客户端缓存的优势是什么?

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

1 个答案:

答案 0 :(得分:2)

听起来您正在引用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来跟踪更正文档。