HDFS写操作:

1、Client写文件时,先向namenode发起一个写文件的请求

2、Namenode会在元数据中为此请求分配文件名和备份数,将分配置的Datanode列表返回给Client

3、Client向第一个Datanode发起Write请求,并将Datanode列表发给第一个Datanode,Datanode接收Block中的小块信息后,通过管道的方式将接收的小块信息及Datanode去除自己的列表发给第二个Datanode并同时接收Block中的下一个小块,第二个Datanode将继续发送小块到第三个Datanode副本,最后一个Datanode发现列表中只有自己时就会完成写操作,这时会给第二个Datanode返回一个Ack通知数据写完了,第二个Datanode会继续发送Ack给第一个Datanode通知数据写完了,Client收到Datanode1发来的ack,就知道写操作完成了。

4、Client发送消息给Namenode通知写操作已经完成


HDFS读操作:

1、Client读文件时,先向namenode发起一个读文件的请求

2、Namenode会在元数据信息中查找相应的block存放信息,将返回一个Datandoe列表给Client

3、Client收到返回的Datanode列表,会选择一个离自己最近的Datanode读取数据


HDFS删除操作:

1、Client删除文件时,先向namenode发起一个删除文件的请求

2、Namenode会在元数据信息中找到对应的信息,在Editlog中写一条删除操作的日志,此时就返回给Client文件已删除

3、之后的操作,在Datanode向Namenode发送心跳信息时,Namenode得到Datanode发送的BlockReport后,会查询此Block是属于什么文件,如果发现有Block已经是属性Invalid状态,会将此类block的列表返回给Datanode通知删除这些Block文件,其他的副本会在其他Datanode发送心跳时进行以上同样的删除。