hdfs上传文件的流程
1、客户端上传文件
客户端向namenode发送数据上传的请求(包含数据的长度信息)
hadoop fd -put / / (以上传200M文件为例)
2.namenode检查工作
namenode收到客户端请求之后会进行一系列的检查工作
- 查重处理,如果重复则报错
- 验证上传文件的目标目录是否存在,不存在报错
- 检查权限
- ...
3.返回检查信息到客户端
第二部检查通过之后,namenode会给可客户端返回一个存储的节点信息
- 返回的原则【就近原则】
- 优先返回客户端所在节点
- 其次返回同机架的节点
- 最后返回不同不同机架的节点
4.数据切块
客户端收到第三部的响应之后,会进行一次切块处理【这里是逻辑切块】
物理切块:真实的切分,将200M切分为128M+72M。两个块会分别存储
逻辑切块:可以理解为切分前的准备,每个块128M,计算出需要切分成几个块(切块规划)
5.准备文件上传,构建统计pipeline (根据块的id进行构建)
将同一个块的所有存储节点构建成一个数据流通道
按照块的id依次构建通道,构建完成之后会逆序返回一个响应
6.开始文件上传(以块为单位)
开始真正的文件上传,边上传边进行数据的物理切块
上传的时候是以package为单位进行上传的(512kb)
上传的时候会先写入缓存中,缓存中每接收到一个package就可以向下一个节点传递(同时缓存中的数据会写入磁盘)
当第一个块数据上传完成,通道关闭
重复该步骤,直到所有块上传完成,给客户端返回结果,数据上传成功
图例:
总结来自该课程,有兴趣可以去网易云课堂搜索课程详细了解