开发者社区> 问答> 正文

HDFS写文件的流程是什么呢?

HDFS写文件的流程是什么呢?

展开
收起
游客mm5dulkpivqdo 2021-12-13 00:12:50 509 0
1 条回答
写回答
取消 提交回答
  • 1)客户端调用DistributedFileSystem的create方法

    2)DistributedFileSystem远程RPC调用Namenode在文件系统的命名空间中创建一个新文件,此时该文件没有关联到任何block。 这个过程中,Namenode会做很多校验工作,例如是否已经存在同名文件,是否有权限,如果验证通过,返回一个FSDataOutputStream对象。 如果验证不通过,抛出异常到客户端。

    3)客户端写入数据的时候,DFSOutputStream分解为packets,并写入到一个数据队列中,该队列由DataStreamer消费。

    4)DateStreamer负责请求Namenode分配新的block存放的数据节点。这些节点存放同一个Block的副本,构成一个管道。 DataStreamer将packer写入到管道的第一个节点,第一个节点存放好packer之后,转发给下一个节点,下一个节点存放 之后继续往下传递。

    5)DFSOutputStream同时维护一个ack queue队列,等待来自datanode确认消息。当管道上的所有datanode都确认之后,packer从ack队列中移除。

    6)数据写入完毕,客户端close输出流。将所有的packet刷新到管道中,然后安心等待来自datanode的确认消息。全部得到确认之后告知Namenode文件是完整的。 Namenode此时已经知道文件的所有Block信息(因为DataStreamer是请求Namenode分配block的),只需等待达到最小副本数要求,然后返回成功信息给客户端。

    2021-12-13 00:13:15
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
海量数据分布式存储——Apache HDFS之最新进展 立即下载
零基础实现hadoop 迁移 MaxCompute 之 数据 立即下载
HDFS optimization for HBase at XiaoMi 立即下载

相关实验场景

更多