HDFS的读取流程、写入流程、删除流程

读流程:
1、客户端通过rpc访问NameNode。(调用fileSystem的open方法,获取distributedFileSystem实例)
2、NameNode查询元数据,获取元数据路径,将文件的全部或部分文件块的存储路径,放入队列,发送给客户端。
3、客户端收到队列(FSDataInputStream对象,封装为DFSInputStream,方便管理DataNode与namenode数据流)后,依次遍历队列按hadoop的拓扑结构排序,读取文件块信息。
4、客户端通过队列(调用Read方法)获取第一个文件块的存储位置,(DFSInputStream)寻找最近的DataNode读取
5、读取完成后校验文件块的大小是否符合,如果符合,继续读取第二块文件块,不符合,通知NameNode当前文件块已损坏,从其他节点的获取当前文件块
6、客户端将这一批文件块读取完后,再次请求NameNode获取下一批文件块的地址。
7、客户端读取锁有文件块后,通知NameNode关闭文件。

写流程
1、client发起rpc访问NameNode。
2、NameNode收到请求后进行校验:是否存在校验,路径校验,权限校验。
3、所有校验通过,计算文件大小,,计算分块数,分配对应的DataNode,记录元数据,将文件块的元数据添加到队列,返回给客户端。
4、客户端收到队列,将文件以128M切块,每块封装成packets对象,准备发送。
5、客户端取出第一块地址,从地址中选出一个距离较近的节点,将packets写到对应的DataNode上。
6、这个DataNode通过pipeline(管道)将数据传到其他DataNode上 ,保证了HDFS副本数量
7、客户端所有packets写完之后,会给NameNode发送结束信号。
8、NameNode收到结束信号后,将文件关闭,同时将文件设为不可写入。

删除流程
1、client发送rpc请求到NameNode。
2、NameNode收到请求后将操作更新到edits文件及内存中。
3、NameNode更新完元数据后,给客户端返回一个ack信号表示删除成功,此时文件并没从DataNode中删除。
4、等DataNode发送心跳信息时,NameNode收到心跳信息,检验是否与元数据一致
5、不一致,说明DataNode删除,NameNode返回一条指令,让对应的DataNode删除。

猜你喜欢

转载自blog.csdn.net/qq_38973672/article/details/87260594
今日推荐