一、HDFS写流程
租约检查参照:HDFS租约机制: HDFS写BLock块及数据同步到磁盘时如何保证数据一致性
流程:
1.客户端向NameNode通信请求上传文件,附带path
2.namenode进行检查
检查的内容:
- hdfs的文件目录
- 权限检查
- 集群状态
- 租约检查
3.NameNode返回是否可以上传
4.得到肯定回复后,客户端切块,再次请求存放的datanode地址。
5.响应返回给客户端dn1,dn2,dn3的地址
6.客户端向datanode请求建立管道:DataNode 1收到请求会继续调用DataNode 2,然后DataNode 2调用DataNode 3,将整个pipeline建立完成,然后逐级返回客户端。地址使用队列存储,dn1使用pop方法取出并删除第一个值,将队列传输给dn2...
7.datanode检查自身是否能够存储,响应给客户端
8.开始传输数据,以pocket为单位
9.dn1将pocket以此传给dn2,dn2传给dn3
10.传输完成,返回确认信息。将管道删除,然后根据副本数做自动平衡。
二、HDFS读流程
1、与NameNode通信查询元数据,找到文件块所在的DataNode服务器
2、挑选一台DataNode(网络拓扑上的就近原则,如果都一样,则随机挑选一台DataNode)服务器,请求建立socket流
3、DataNode开始发送数据(从磁盘里面读取数据放入流,以packet(一个packet为64kb)为单位来做校验)
4、客户端以packet为单位接收,先在本地缓存,然后写入目标文件
三、checkpoint流程
可在hdfs-size.xml里指定secondarynamenode节点位置。
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>linux01:50090</value>
</property>
1.当记录的条数达到100W条或者时间达到3600S时提示namenode进行checkpoint
2.edits_inpogress停止记录,将记录拷贝到edits_00000n里
3.将edits_00000n拷贝到sn,将fsimage拷贝到sn(如果sn没有启动,那么此步骤由namenode执行)
4.内存将edits与fsimage的内容进行整合,得到新的fsimage。
5.把新的fsimage传给namenode checkpoint完成
四、元数据内容
从形式上讲,元数据可分为内存元数据和元数据文件两种。其中NameNode在内存中维护整个文件系统的元数据镜像,用于HDFS的管理;元数据文件则用于持久化存储。
从类型上讲,元数据有三类重要信息:
- 第一类是文件和目录自身的属性信息,例如文件名、目录名、父目录信息、文件大小、创建时间、修改时间等。
- 第二类记录文件内容存储相关信息,例如文件块情况、副本个数、每个副本所在的Data Node 信息等。
- 第三类用来记录HDFS中所有Data Node信息,用于Data Node管理。
磁盘元数据文件包括以下四个
- fsimage:元数据镜像文件。
- edits:日志文件。
- fstime:保存最近一次Checkpoint的时间。
- VERSION:标志性文件,最后被创建,它的存在表明前三个元数据文件的创建成功。
fsimage是HDFS文件系统存于硬盘中的元数据检查点,里面记录了自最后一次检查点之前HDFS文件系统中所有目录和文件的序列化信息;而edits保存了自最后一次检查点之后所有针对HDFS文件系统的操作,比如:增加文件、重命名文件、删除目录等等。