前言
简单的描述HDFS文件系统的读写流程,以及向HDFS文件系统写入文件时为什么要使用pipline。实际读写流程远比下面描述的复杂。
将文件写入HDFS文件系统
1.客户端向NameNode发送写入指令
2.NameNode检查是否可以写入(目录是否存在、集群是否可用)并返回信息
3.客户端向NameNode请求DataNode写入列表进行数据写入
4.返回进行写入的DataNode列表(3副本)
5.与第一个写入的DataNode创建数据传输队列执行写入操作
6.DataNode间依次创建pipline
7.DataNode依次返回ACK回调
8.客户端收到DataNode1、2、3的ACK回调,并且数据写入完成
9.客户端关闭连接
DataNode发送心跳包,汇报块信息,由NameNode校验是否写入存储完成
从HDFS文件系统读取文件
1.客户端向NameNode发送读取指令
2.NameNode检查文件是否可以读取
3.客户端向NameNode发送需要读取的文件数据列表
4.NameNode返回要读取的block列表及副本位置
5.客户端根据block列表从第一个block开始读取
6.第一个block读取完成后,返回ACK回调
7. 8.读取第二个block,完成后返回ACK回调
9.数据全部读取完成,所有ACK回调返回给Client结束本次文件读取
10.关闭连接
为什么使用piplin
不使用pipline
如果此时每一台服务的带宽是1M/min,文件大小是3M
1.如果仅给一台服务器传输数据,需要3分钟
2.如果同时给三台服务传输数据,Client传输数据的带宽是1M/min,此时每一个DataNode接收数据的速度为 1/3 M/min
3.三台服务同时接收数据,需要9分钟能够接收完所有数据
Client如果带宽无限的情况下此方法只需要3分钟,实际情况带宽提升费用较高.
使用pipline
如果此时每一台服务的带宽是1M/min,文件大小是3M
1.客户端传输数据到DataNode1需要3分钟
2.DataNode间建立通道后,DataNode接收数据的同时可以发送数据
3.此时我们可以将每一台服务的带宽都利用起来最终备份完成的时间远小于同时备份,需要时间
所需时间在3分钟以上,但是不会超出太多
时可以发送数据
3.此时我们可以将每一台服务的带宽都利用起来最终备份完成的时间远小于同时备份,需要时间
所需时间在3分钟以上,但是不会超出太多
这种方式并不是效率最高的方式,但这是低成本下一个较好的解决方案