专业编程基础技术教程

网站首页 > 基础教程 正文

一张图教你读懂hdfs写数据的流程(hdfs 写流程)

ccvgpt 2024-11-17 07:22:18 基础教程 6 ℃

流程图


步骤?

  • 步骤一:客户端通过调用DistributedFileSystem对象的'create()'方法启动写操作,该方法创建一个新文件
  • 步骤二:DistributedFileSystem对象使用RPC调用连接到NameNode并初始化新文件创建。但是,这个文件创建操作不会将任何块与文件关联起来。NameNode有责任验证该文件(正在创建的文件)是否已经不存在,并且客户端是否有正确的权限来创建一个新文件。如果一个文件已经存在或者客户端没有足够的权限来创建一个新的文件,那么会向客户端抛出IOException。否则,操作成功,并由NameNode为该文件创建一个新记录。
  • 步骤三:一旦NameNode中的新记录被创建,一个类型为FSDataOutputStream的对象就会返回给客户端。客户端使用它将数据写入HDFS中。数据写入方法被调用(图中的步骤3)。
  • 步骤四:FSDataOutputStream包含了DFSOutputStream对象,它负责看管与DataNodes和NameNode的通信。当客户端继续写数据时,DFSOutputStream继续用这些数据创建数据包。这些数据包会被检录到一个队列中,这个队列被称为DataQueueue。
  • 步骤五:还有一个组件叫DataStreamer,它消耗这个DataQueueer。DataStreamer还要求NameNode分配新的数据块,从而选择合适的DataNode用于复制。
  • 步骤六:现在,复制的过程开始于使用DataNodes创建一个流水线。在我们的例子中,我们选择了一个3的复制级别,因此在流水线上有3个DataNodes。
  • 步骤七:DataStreamer将数据包倒入管道中的第一个DataNode。
  • 步骤八:管道中的每个DataNode都会存储由它接收到的数据包,并转发到管道中的第二个DataNode。
  • 步骤九:另一个队列 "Ack Queue "由DFSOutputStream维护,用于存储等待来自DataNodes的确认数据包。
  • 步骤十:一旦从管道中的所有DataNode收到队列中的数据包的确认,它将从 "Ack队列 "中删除。在任何DataNode失败的情况下,从这个队列中的数据包将被用来重新启动操作。
  • 步骤十一:客户端写完数据后,调用close()方法(图中的步骤9),调用close(),结果是将剩余的数据包冲洗到流水线上,然后等待确认
  • 步骤十二:一旦收到最后的确认,就会联系NameNode,告诉它文件写入操作已经完成。
  • 一张图教你读懂hdfs写数据的流程(hdfs 写流程)

    最近发表
    标签列表