HDFS读写流程及涉及的原理

一、HDFS的读数据流程

HDFS读写流程及涉及的原理

流程概述:

1.客户端会先创建distributedfilesystem向namenode发出下载文件的请求

2.namenode返回目标文件的元数据信息

3.客户端通过FSDataInputStream向DataNode1和DataNode2读取数据

4.数据回传。5和6过程同3和4。然后客户端关闭流

注:客户端读取数据由于带宽所限,采取就近原则。本地DataNode,距离最近>>>>>>>>>如果没有,取同机架>>>>>>>如果没有,取数据中心。(机架感知)

二、HDFS的写数据流程

HDFS读写流程及涉及的原理

流程概述:

1.通过createDistributeFileSystem向namenode请求向某个路径下上传数据

2.namenode响应可以上传

3.提交上传数据详情,请求上传第一个block,请求返回对应DataNode

4.返回可存储数据的节点,DataNode1,DataNode2,DataNode3

5.依次请求建立block数据传输通道(客户端会根据返回的三个节点和第一个节点建立一个socket连接(只会和第一个节点建立),第一个节点又会和第二个节点建立socket连接,由第二个节点又会和第三个节点建立一个socket连接,这种连接的方式叫Pipeline)。

6.DataNode响应成功,通道建立

7.client逐一重复将数据按块的方式传输

8.数据传输完成,告诉namenode。namenode收到所有的块数据后上传完成后,会将文件的.copying后缀去掉,然后文件可用。

注:①这里如果在传输过程中,任意节点失败,上游节点会直接和失败的下游节点建立连接,最终在所有连接完成后汇报,namenode发现副本数不足,会发出复制副本命令②通过第8步来解释为什么在insert overwrite的过程中,数据一定是一点点写的,但是为什么过程中查不出数据

三、NameNode和SecondaryNameNode工作机制

HDFS读写流程及涉及的原理

流程概述:

edits.001==编辑日志(记录namenode执行的编辑操作),fsimage==镜像文件(存储namenode中记录的元数据的状态)

蓝线部分------1.当namenode启动的时候,会先将编辑日志和镜像文件加载到内存中,此时就有了元数据信息。2.当客户端有编辑操作的时候。3.会将这些操作记录到编辑日志中(先编辑为edits.inprogress文件,当文件满了的时候重命名为001,002。。。)

紫线部分------前提(checkpoint的启动可以由时间控制,也可以由文件大小控制,文件大小指的就是edits的文件满了,就触发)1.请求是否需要执行checkpoint。2.请求执行checkpoint。3.将正在编写的edits.inprogress文件滚动生成edits.003,也就是最新的文件。4.将edits.003和上一个满了的edits.002文件和fsimage这三个文件拷贝到secondaryNameNode中。5.将这三个文件加载到内存,在内存中经过处理后。6.生成fsimage.checkpoint镜像文件。7.将镜像文件拷贝到namenode中。8.将文件重来命为fsimage,这样当namenode宕机重启后,就会读取上一次保存的元数据信息。

注:这个不能百分之百数据不丢失。