hdfs上传文件的流程

1、客户端上传文件

客户端向namenode发送数据上传的请求(包含数据的长度信息)
hadoop fd -put / /     (以上传200M文件为例)

2.namenode检查工作

namenode收到客户端请求之后会进行一系列的检查工作

  1. 查重处理,如果重复则报错
  2. 验证上传文件的目标目录是否存在,不存在报错
  3. 检查权限
  4. ...

3.返回检查信息到客户端

第二部检查通过之后,namenode会给可客户端返回一个存储的节点信息

  • 返回的原则【就近原则】
  • 优先返回客户端所在节点
  • 其次返回同机架的节点
  • 最后返回不同不同机架的节点

4.数据切块

客户端收到第三部的响应之后,会进行一次切块处理【这里是逻辑切块

物理切块:真实的切分,将200M切分为128M+72M。两个块会分别存储
逻辑切块:可以理解为切分前的准备,每个块128M,计算出需要切分成几个块(切块规划)

5.准备文件上传,构建统计pipeline (根据块的id进行构建)

将同一个块的所有存储节点构建成一个数据流通道
按照块的id依次构建通道,构建完成之后会逆序返回一个响应

6.开始文件上传(以块为单位)

开始真正的文件上传,边上传边进行数据的物理切块
上传的时候是以package为单位进行上传的(512kb)
上传的时候会先写入缓存中,缓存中每接收到一个package就可以向下一个节点传递(同时缓存中的数据会写入磁盘)
当第一个块数据上传完成,通道关闭

重复该步骤,直到所有块上传完成,给客户端返回结果,数据上传成功

 

图例:

hdfs上传文件的流程

总结来自该课程,有兴趣可以去网易云课堂搜索课程详细了解