Hadoop HDFS 读写流程 | 图文详解

HDFSHadoop的分布式文件系统,负责海量数据的存取
在这里插入图片描述
HDFS系列文章请参考:


一、HDFS写数据流程

1、文件写入流程

下图为文件写入流程剖析图:
在这里插入图片描述
想要上传一个200M的文件ss.aviHDFS,它的写入流程是这样的:

  • 客户端创建Distributed FileSystem,该模块向HDFS的老大哥NameNode请求上传文件ss.avi
  • 老大哥NameNode是个做事很守规矩的人,所以他要检查权限和目录结构是否存在,如果存在就向Distributed FileSystem响应可以上传文件
  • 但是Distributed FileSystem并不知道我上传的文件应该传给哪个小老弟(DataNode1、2、3),就问老大哥:”大哥,我应该上传到哪个DataNodee小老弟服务器啊?“
  • 老大哥NameNode需要想一下文件应该存到哪个机器上(这个过程叫做副本存储节点选择,下文有写),想好之后就返回dn1、2、3说”这三个可以存文件“
  • 这时候客户端就要创建文件输出流FSDataOutPutStream让他去上传数据
  • 数据是需要通过管道进行传输的,所以文件输出流就需要先铺设管道,它首先请求dn1dn1再调用dn2,最后dn2调用dn3,将这个通信管道建立完成,dn1、2、3逐级应答客户端建立完毕
  • 这时候,客户端就开始往dn1上传第一个Block,以Packet为单位,dn1收到一个Packet就会传给dn2dn2再传给dn3为了保证数据不丢失,三个机器在传数据的时候,都有自己的一个应答对列放Packet,直到收到下一台机器传回的ack应答信息,才把Packet删掉。
  • 当一个Block传输完成之后,客户端会再次请求NameNode上传第二个Block的服务器。重复执行上面的操作,直到所有的数据都上传完成

2、网络拓扑 - 节点距离计算

HDFS写数据的过程中,NameNode会选择距离待上传数据最近距离的DataNode接收数据,需要计算出这个距离。

节点距离:两个节点到达最近的功能祖先的距离总和

现实生活中,服务器都会在机架上放着,然后形成一个,看下图:
在这里插入图片描述

我们要想计算节点距离,可以把他抽象成一个图:
在这里插入图片描述
如果我们要算机器d1->r2->n1d2->r6->n0的距离,则需要找到他们的共同祖先,然后把把路径相加就可以了,如下图所示:
在这里插入图片描述
则:Distance(d1/r2/n1,d2/r6/no) = 6

3、机架感知(副本存储节点选择)

HDFS写文件会把第一个副本存储在客户端所处节点上,第二个副本在另一个机架上的随机一个节点,第三个副本在第二个副本所在机架的另外一个随机节点上。如下图所示:
在这里插入图片描述

二、HDFS读数据流程

HDFS读数据流程如下图所示:
在这里插入图片描述

  • 客户端通过DistributedFileSystemNameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址
  • 挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据
  • DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)
  • 客户端以Packet为单位接收,现在本地缓存,然后写入目标文件
  • 6
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值