HDFS写文件的过程

1、副本及存储策略:

  • 保证副本复制时的效率(低延迟和网络性能):多个副本在同一机架上,这样副本复制时效率高。
  • 避免数据丢失:至少一个副本与其它副本在不同的机架上。

2、写文件的网络流量及磁盘空间:

 网络流量=磁盘空间=文件size*dfs.replication

3、写数据的流程

* client将文件file1划分出blocks     ——       block1、block2、block3...
* client向NN发出写block的请求     ——        文件file1的block1
* NN响应client的请求  ——     指示client将file1的block1写到如下位置:
    * rack1  上的  dataNodeA、dataNodeB
    * rack2   上的  dataNodeC

* client向dataNodeA发出写block的请求:
    * 文件file1的block1
    * 并告知还需将block写到dataNodeB和dataNodeC

* dataNodeA一边将数据存入自身磁盘,一边向dataNodeB发出写block的请求,具体内容同上一步骤
* dataNodeB一边将数据存入自身磁盘,一边向dataNodeC发出写block的请求,具体内容同上一步骤
* dataNodeC完成block数据存储后,响应dataNodeB:
    * 告知自身对file1-block1的存储已经正常完成。
    * 自身同时存储元数据(file1,block1,block1start...)

* dataNodeB接收到dataNodeC的响应后,响应dataNodeA:
    * 告知对file1-block1的存储已经正常完成。
    * 自身同时存储元数据(file1,block1,block1start..)

* dataNodeA接收到dataNodeC的响应后,响应client。
* dataNodeA、dataNodeB、dataNodeC在存储一个新的block后,会向NN发送报告,NN会及时更新file1-block1的元数据:
    * (fiel1,block1,replicationids)
    * replicationid1,dataNodeA
    * replicationid2,dataNodeB
    * replicationid3,dataNodeC

你可能感兴趣的:(hdfs)