HDFS文件读写流程

HDFS写流程

正常情况下的写流程

异常情况下的写流程

所谓异常情况,一般指在上述5、6步骤中出现网络问题或节点宕机导致传输失败的问题。

1、在写的流程中,client先将packet存储到dataQueue队列中
	2、发送时,dataQueue队列中的每个packet依次发送到通道
        packet发送到通道后,会从dataQueue中移动到ackQueue中
	4、当该packet受到了所有DN节点回复的ack确认信息后,从ackQueue中删除该packet
	5、如果收到确认消息后超时,则中断传输,所有ackQueue中的packet立刻回滚到dataQueue中,重新建立通道
		此时会剔除坏的DN节点,继续传输,只要有传输完成,DN向NN汇报blk信息
	6、同正常传输流程,只要有一个DN节点上报blk信息,NN就认为blk已经传输完成,通道关闭

*关于HDFS中副本上传中的副本放置策略(三个副本时)

第一个副本:client所在节点or随机节点
第二个副本:同机架上的随机节点
第三个副本:不同机架的随机节点

HDFS读流程

1、启动服务端的NN、DN进程,提供分布式文件系统客户端
	2、由客户端向NN发送请求,请求下载一个文件,NN对其请求进行合法性检查
	3、若合法,NN响应客户端允许下载,同时返回当前下载文件的所有的元数据信息(meta)
	4、客户端根据返回的元数据信息,去对应的每个DN系欸DNA按照顺序依次下载每个blk

NameNode与SecondaryNameNode

NN的作用

  • NN保存着HDFS上所有文件的元数据
  • 负责接受客户端的请求
  • 负责接收DN上报的信息,给DN分配任务

NN负责集群中所有客户端的请求和所有DN的请求,在一个集群中,通常NN需要一个高配置机器,保证NN可以及时处理客户端或DN的请求,一旦NN无法及时处理请求,HDFS就已经瘫痪。

元数据

NN的元数据存储在fsimage和edits中:
	- fsimage:元数据的快照文件
	- edits:记录所有写操作的文件
fsimage文件的产生
1,第一次格式化NN时,此时会创建NN工作的目录 fsimage_0000000000文件
        2,当NN在启动时,NN会将所有的edits文件和fsimage文件加载到内存中合并得到最新的元数据,将元数据持久化到磁盘生成新的fsimage文件
        3,如果启动了SNN,SNN也会辅助NN合并元数据,会将合并后的元数据发送到NN(SNN一般不和NN放置在同一个节点上)
edits文件
每次写操作,分解为若干步,每一步都有一个id,这个id称为txid。

NN和2NN的工作机制

java hdfs 读取 ak 文件_元数据

第一阶段:nn启动

第一次nn格式化后,创建fsimage和edits文件,如果不是第一次启动,直接加载fsimage和edits到内存并将其合并为新的fsimage文件并滚动edits日志文件。

第二阶段 2nn的工作

1、Secondary NameNode询问NameNode是否需要CheckPoint。直接带回NameNode是否检查结果。
2、Secondary NameNode请求执行CheckPoint。
3、NameNode滚动正在写的Edits日志。
4、将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode。
5、Secondary NameNode加载编辑日志和镜像文件到内存,并合并。
6、生成新的镜像文件fsimage.chkpoint。
7、拷贝fsimage.chkpoint到NameNode。
8、NameNode将fsimage.chkpoint重新命名成fsimage。