1.数据读取流程
1)客户端通过DistributedFileSystem模块向NameNode请求下载文件。
2)NameNode通过查询元数据,找到文件每一个Block块所在的DataNode地址,将其返回给客户端。
3)客户端挑选一台DataNode(就近原则)服务器,请求读取数据。
4)DataNode将客户端所需的Block从磁盘里面读取出来,以Packet为单位来做校验,如果校验失败则通知
客户端,客户端会重新向存有此Block副本的其他DataNode发送读取请求。校验成功则客户端以Packet为单
位接收,并进行缓存,最后写入指定文件。
![HDFS数据读取流程](https://img-blog.csdnimg.cn/93b37b14964841cea080771050ba7104.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAbGl1X3l1X3Jhbg==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
2.数据写入流程
1)客户端通过DistributedFileSystem模块向NameNode发送上传文件的请求,NameNode对要上传的文件
进行检查(是否已存在,其父目录是否存在,权限等)。
2)NameNode返回是否可以上传。
3)客户端请求第一个Block上传到哪几个DataNode上。
4)NameNode首先检查客户端是否有可用的DataNode,如果没有就会在其他位置随机选择一个DataNode节
点,再在与第一个DataNode节点不同的机架上随机选择第二个DataNode节点,最后在第二个DataNo