HDFS2.X源码分析之:NameNode写文件原理

本文深入剖析了HDFS2.x中NameNode如何处理文件写入,包括创建元数据、分配数据块的过程。在创建元数据阶段,NameNode检查文件是否存在、验证权限,如果文件已存在,根据覆盖或追加设置处理。在分配数据块时,NameNode为每个块生成ID并确定副本存储位置。文章还讨论了客户端写入数据时的故障恢复策略和pipeline机制。
摘要由CSDN通过智能技术生成

原文出自云台博客:http://yuntai.1kapp.com/?p=950

      HDFS被设计成写一次,读多次的应用场景,这应该跟它的MapReduce机制是紧密关联的,通过对线上的读写比例监控,大概读写比是10:1,也验证了它设计的目标。 

GFS论文提到的写入文件简单流程:


HDFS详细流程:


写入文件的过程比读取较为复杂:

1、 使用HDFS提供的客户端开发库Client,向远程的Namenode发起RPC请求;

2、 Namenode会检查要创建的文件是否已经存在,创建者是否有权限进行操作,成功则会为文件创建一个记录,否则会让客户端抛出异常;

3、 当客户端开始写入文件的时候,会将文件切分成多个packets,并在内部以数据队列"data queue"的形式管理这些packets,并向Namenode申请新的blocks,获取用来存储replicas的合适的datanodes列表,列表的大小根据在Namenode中对replication的设置而定;

4、 开始以pipeline(管道)的形式将packet写入所有的replicas中。开发库把packet以流的方式写入第一个datanode,该datanode把该packet存储之后,再将其传递给在此pipeline中的下一个datanode,直到最后一个datanode,这种写数据的方式呈流水线的形式;

5、 最后一个datanode成功存储之后会返回一个ack packet,在pipeline里传递至客户端,在客户端的开发库内部维护着"ack queue&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值