HDFS上传、下载流程

HDFS上传

上传过程参考此图


在这里插入图片描述






  首先,有一个200M文件要上传,那么Client首先要读取这个文件,Distributed FileSystem就是整个集群的抽象封装。Client向NameNode发起一个上传请求,NameNode审查请求是否合法(比如相同路径下已经有了文件,有没有上传权限等),之后回复响应可否上传。此时文件就被切了块,分成了128M+72M,如下图。
在这里插入图片描述






  之后,往HDFS上传,要开一个输出流,FSDataOutoutStream,开了输出流之后,Client就请求上传第一块Block,即0-128M的文件。NameNode此时返回一个Node的list。如下:
在这里插入图片描述






  你在文件里设置要存储到几个DataNode(比如3个),就会返回给你几个DataNode。其中第一个DN1是离Client最近的一个,后两个是根据DN1选出来的,(此处的最近策略,参考拓扑距离和机架感知)。之后Client就会向第一个DN1发起建立文件传输的请求,DN1顺次向DN2建立请求,DN2顺次向DN3建立请求。最后的DN3收到请求之后,依次向DN2发起应答,DN2向DN1发起应答,DN1向Client发起应答。当Client收到应答的时候就代表这个文件传输通道建立成功了。如下图:
在这里插入图片描述






  Client此时开始向DN1传输Packet (64KB一个),DN1的内存buffer收到,一边往硬盘上去写,一边往DN2去传输。DN2同理,直到DN3写完把数据存到本地。
注意: 发送packet并不是等第一个packet发送完了才去传输第二个,而是顺序发送(感觉有点像计算机网络里面的流水线传输)最后直到第一块clock所有的数据(128M)传输完毕,接着开始传输下一块block(72M)。如下图:
在这里插入图片描述
第二次选择的DataNode是DN4,DN5,DN6,就证明两次的DN选择是完全独立的过程。
HDFS的数据存储的最小单位是块block,同一个文件如果分成了不同的块,那么不同的块有可能被存储在不同的DN上。

两种失败的情况
(1)建立传输通道的过程失败了。那么整个数据传输失败。
(2)传输packet的过程失败了。如果是C向DN1传输失败,那么文件传输失败。如果是DN1或者DN2向后面的DN传输数据失败了,那么上传是仍然可以顺利进行的,而且会返回给你成功信号,因为数据已经存储在了第一个DN1上。(设置的存储的DN数量是3,实际上只有DN1有,则会触发自动备份机制。)





HDFS下载

和上传的过程差不多,也实现建立一个DistributedFileSystem的封装,之后开一个输入流FSDataInputStream。C向NN发起请求,NN返回三个节点信息。C此时向第一个DN发起数据传输请求,请求若成功,则传输数据。如下图:
在这里插入图片描述
此时若DN1请求失败,则C向DN2请求,DN2失败就向DN3建立请求,直到请求成功。如果三个DN均失败,那么此次下载过程就失败了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HDFSHadoop Distributed File System)是Apache Hadoop的一部分,是一个可扩展的分布式文件系统,用于存储和处理大型数据集。HDFS上传文件流程如下: 1. 客户端向NameNode发出上传请求,并提供要上传文件路径和文件块大小等信息。 2. NameNode接收到客户端的上传请求后,首先检查该文件是否已经存在于HDFS中,如果存在则返回错误信息,否则在内存中创建该文件的元数据信息,并返回给客户端一个DataNode列表。 3. 客户端根据返回的DataNode列表,选择一个DataNode作为数据块的上传目标,并向该DataNode发出上传请求。 4. DataNode接收到客户端的上传请求后,创建一个临时文件用于存储上传的数据块,并返回一个用于后续数据块传输的随机端口号。 5. 客户端通过随机端口号与DataNode建立Socket连接,并向DataNode传输数据块。 6. DataNode接收到客户端传输的数据块后,将该数据块写入临时文件中,并返回上传成功的响应信息。 7. 客户端在完成对数据块的上传后,向NameNode发送一个完成上传的请求,NameNode接收到该请求后,将所有数据块的信息保存在该文件的元数据信息中,并将元数据信息持久化到磁盘中,从而完成整个文件上传过程。 需要注意的是,如果上传文件大小超过了HDFS的块大小,则会将文件分成多个数据块进行上传,每个数据块都会分别上传到不同的DataNode上,并且每个数据块上传完成后都需要向NameNode发送一个完成上传的请求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值