HDFS读、写数据流程(图解)以及元数据的checkpoint机制

一、HDFS概述

HDFS集群由NameNode,DataNode,SecondaryNameNode构成。

NameNode:接受用户请求。存储元数据(描述文件的数据,如文件名、文件大小、目录名、文件创建时间等)

DataNode:负责管理用户的文件数据块(block),通过心跳机制汇报给NameNode。

           (1)文件默认会按照每128M切分为block块存储在DataNode上,每个block块默认会有三个副本存放在不同的DataNode上

           (2)DataNode会定期向NameNode汇报自身所保存的文件block块信息

SecondaryNameNode:主要负责辅助NameNode,定期合并fsimage(快照文件)和edits(日志文件),并同步一份给NameNode

二、元数据的checkpoint机制(NameNode与DataNode的联系)

 

三、HDFS写数据流程

宏观:

 

微观: 

 

HDFS写数据流程

1.客户端使用rpc通信框架向NameNode发送请求,NameNode接收并处理用户的请求。

2.NameNode审核用户文件的操作权限,文件路径,磁盘空间是否可用,审核通过后,NameNode会返回成功状态给DFS(分布式文件系统)

3.如果DFS接收到成功的状态,会创建一个FSDataoutputStream的对象给客户端使用

4.客户端向NameNode获取文件存储在HDFS中所需要的所有DataNode节点

5.NameNode对客户端划分的block块分配好所有的DataNode

6.客户端通过机架感知与最近的DataNode建立联系,将block块划分为2048个packet进行发送,直到所有的packet发送完毕后,则当前的block块传输完毕,开始传输下一个block块中的packet

7.DataNode之间会形成pipeline通道传输这些packet

8.传输完毕后发送确认值给客户端

9.当最后一个block中的最后一个packet传输完毕后,释放FSDataoutputStream对象,关闭DataNode之间的pipeline通道,至此,写数据完成。

四、HDFS读数据流程  

 

HDFS读数据流程

1.使用HDFS提供的client,向远程的NameNode发起RPC请求

2.namenode会视情况返回文件的部分block块信息列表或者全部block,对于每个block,namenode都会返回该block副本的DataNode地址

3.client会选取离最近的DataNode读取block块

4.建立socket流,DataNode发送数据,以packet的单位接收,先在本地缓存,然后写入目标文件。读取完block,关闭当前的datanode连接,再寻找下一个block最佳的datanode。

5.读取完block后且文件没有读取完,client继续向namenode获取下一批block块

6.后面的block块相对于append到前面的block块,最后合成最终需要的文件

7.读取一个block都会进行checksum验证。如果读取DataNode出现错误,client会通知NameNode,然后再从下一个拥有block的DataNode继续读