Hadoop HDFS 读写流程 | 图文详解

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

  • 一、HDFS 概述 | 优缺点 | 组成架构 | 文件块大小
  • 二、HDFS 常用Shell命令 | 图文详解
  • 三、HDFS 搭建客户端 API 环境 | 图文详解 | 提供依赖下载连接
  • 四、HDFS API 操作图文详解及参数解读
  • 五、HDFS 读写流程 | 图文详解
  • 六、HDFS | NameNode和SecondaryNameNode的工作机制
  • 七、HDFS | DataNode工作机制 | 数据完整性 | 掉线时限参数设置

文章目录

  • 一、HDFS写数据流程
    • 1、文件写入流程
    • 2、网络拓扑 - 节点距离计算
    • 3、机架感知(副本存储节点选择)
  • 二、HDFS读数据流程


一、HDFS写数据流程

1、文件写入流程

下图为文件写入流程剖析图:
Hadoop 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接收数据,需要计算出这个距离。

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

现实生活中,服务器都会在机架上放着,然后形成一个,看下图:
Hadoop HDFS 读写流程 | 图文详解_第2张图片

我们要想计算节点距离,可以把他抽象成一个图:
Hadoop HDFS 读写流程 | 图文详解_第3张图片
如果我们要算机器d1->r2->n1d2->r6->n0的距离,则需要找到他们的共同祖先,然后把把路径相加就可以了,如下图所示:
Hadoop HDFS 读写流程 | 图文详解_第4张图片
则:Distance(d1/r2/n1,d2/r6/no) = 6

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

HDFS写文件会把第一个副本存储在客户端所处节点上,第二个副本在另一个机架上的随机一个节点,第三个副本在第二个副本所在机架的另外一个随机节点上。如下图所示:
Hadoop HDFS 读写流程 | 图文详解_第5张图片

二、HDFS读数据流程

HDFS读数据流程如下图所示:
Hadoop HDFS 读写流程 | 图文详解_第6张图片

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

你可能感兴趣的:(大数据学习笔记,Hadoop,hadoop,hdfs,大数据,分布式,java)