hdfs:写数据、读数据流程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/poppy_rain/article/details/86501348

写数据(上传文件)流程

  1. 客户端(client)向namenode(nn)请求上传文件
  2. nn查看目录树,检查目录是否存在、文件是否存在
  3. nn返回是否可以上传
  4. (可以上传)client告诉nn,要上传数据块1(block1)
  5. nn查看datanode(dn)信息池,选出三台dn(一般就近随机一台、本机架一台、另一个机架一台)
  6. client请求dn1上传数据(建立pipeline连接),dn1收到请求继续调用n2,dn2调用dn3,完成连接后逐级返回client
  7. client以包(packet)为单位向dn1上传block1,dn1收到数据(读取数据放到本地内存)后传给dn2,dn2传给dn3
  8. 传完一个块后,接着重复步骤4,请求block2

     

补充注意(参考https://blog.csdn.net/qq_26442553/article/details/78529212 ):
1.namenode实际客户端只上传一个datanode,其余两个是namenode完成的。让datenote自己复制的。然后复制完成以后逐级返回结果给namenode.如果2,3datanode复制失败,再有namenode分配新的datanode地址。对于客户端来说默认上传一个datanode就可以了,其余的由datanode自己复制。
2.datanode切片是由客户端完成的。datanode第二三个副本的上传和第一个上传是异步的。

 

读数据(下载文件)流程

  1. client向nn请求读取xx文件
  2. nn查看这个文件有几个块,分别在哪个dn上
  3. client选择一个dn1(就近原则),请求读取数据(建立socket流)
  4. dn1返回block1数据,client以packet为单位接收数据,存到本地缓存,然后写到目标文件
  5. 读block2、block3

     

猜你喜欢

转载自blog.csdn.net/poppy_rain/article/details/86501348