hdfs文件写入与读取过程

文件的写入过程:

  1. client向namenode请求上传a.txt
  2. namenode检测client的上传权限
  3. namenode回答client是否可以上传
  4. client将文件按照block_size大小将文件分为几份,并向namenode请求上传一个block
  5. namenode根据datanode上的block信息和机架感知选择三个主机放置三个副本(hadoop默认三个),并生成可以上传的datanode的列表。
  6. 将生成的可以上传的datanode的列表,这时client就可以直接通过pipeline与datanode通信或者传递信息。
  7. client与一个datanode建立pipeline,datanode之间也会建立pipeline
  8. client将block以packet(64k)为单位传递给datanode
  9. 三个datanode分别将packet信息缓存,此即将block分别复制三个副本。
  10. 缓存之后datanode会向client发送应答,这样一直进行文件的上传完成副本的缓存与文件的上传。
    hdfs文件写入与读取过程

文件的读取过程

  1. RPC:向namenode发出请求下载a.txt
  2. namenode对client进行权限检查,同时对block的文件存在dn进行检查并选出每一个block对应的主机列表
  3. 向client返回每一个block对应的主机列表。
  4. client按照返回的主机列表和每一个block所在的主机建立pipeline进行数据读取,且每一个block都需要建立一个pipeline,并行读取
  5. 开始读取数据,按照packet(64k)的单位进行读取
  6. block全部读取到client中,client将block进行合并成为一个完整的文件。

hdfs文件写入与读取过程