文件写入
HDFS的写数据流程
(1) 客户端通过Distribution FileSystem模块向NameNode请求上传文 件.NameNode检查目录树是否能够创建文件,检查目标文件是否存在
(2)NameNode返回是否可以上传文件.
(3)客户端请求第一个Block上传到哪个DataNode服务器上.
(4)NameNode返回上传到DataNode1,DataNode2,Datanode3这三个服务器节点.
(5)客户端通过FSDataOutStream模块向DataNode请求建立Block上传通道,DateNode1接收到请求是会继续向DataNode2发起建立传输通道的请求,DataNode2向DataNode3发起建立传输通道的请求.
(6)DataNode1,DataNode2,DataNode3逐级应答客户端.
(7)客户端开始向DataNode1上传Block(先从磁盘读取数据放一个到本地内存缓存),以Packet为单位,DataNode1收到一个Packet就会传输给DataNode2,DataNode2传输给DataNode3,DataNode1没传输一个Packet就会放入一个应答队列等待应答.
(8)当第一个Block传输完成之后就可以再次向NameNode发起请求传输第二个Block到DataNode服务器.
HDFS的读数据流程
(1)客户端通过Distribution向NameNode发起请求下载文件到本地,NameNode检查文件是否存在,通过查询元数据找到文件块的DataNode地址.
(2)选取一台DataNode服务器(就近原则,然后随机),请求读取数据
(3)DataNode开始传输数据给客户端(以Packet为单位来校验,从磁盘中读取数据输入流)
(4)客户端以Packet为单位请求接受数据,先在本地缓存,然后写入数据.