李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
03.HDFS读写流程
Leefs
2021-09-15 AM
1589℃
0条
# 03.HDFS读写流程 ### 一、HDFS写数据流程 ![03.HDFS读写流程01.jpg](https://lilinchao.com/usr/uploads/2021/09/3640663369.jpg) **说明** (1)客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。 (2)NameNode返回是否可以上传。 (3)客户端请求第一个 Block上传到哪几个DataNode服务器上。 (4)NameNode返回3个DataNode节点,分别为dn1、dn2、dn3。 (5)客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成。 (6)dn1、dn2、dn3逐级应答客户端。 (7)客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答。 (8)当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。(重复执行3-7步)。 ### 二、网络拓扑-节点距离计算 在HDFS写数据的过程中,NameNode会选择距离待上传数据最近距离的DataNode接收数据。那么这个最近距离怎么计算呢? **节点距离:两个节点到达最近的共同祖先的距离总和。** ![03.HDFS读写流程02.jpg](https://lilinchao.com/usr/uploads/2021/09/393024292.jpg) **说明** 例如,假设有数据中心d1机架r1中的节点n1。该节点可以表示为/d1/r1/n1。 + **同一节点**:它们之间的距离是0,2*0=0 + **同一机架上的不同节点:**它们的共同祖先就是这个机架,而这两个节点到机架的距离都是1,所以这两个节点的距离为1+1=2。 + **同一集群的不同机架上的节点:**它们的共同祖先是集群,而这两个节点要到达集群,首先要到这个机架(距离1),然后到达集群(距离1+1=2),所以两个节点的距离为2+2=4。 + **同一数据中心的不同集群上的节点:**它们的共同祖先是数据中心,以此类推,一个节点到数据中心的距离是3,两个节点的距离就是3+3=6 ### 三、HDFS副本节点选择 ![03.HDFS读写流程03.jpg](https://lilinchao.com/usr/uploads/2021/09/184952194.jpg) ### 四、HDFS读数据流程 ![03.HDFS读写流程04.jpg](https://lilinchao.com/usr/uploads/2021/09/520288330.jpg) **说明** (1)客户端通过DistributedFileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。 (2)挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。 (3)DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)。 (4)客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。 *附:* *文章来源《尚硅谷大数据之Hadoop》*
标签:
Hadoop
,
HDFS
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/1491.html
上一篇
02.HDFS常用命令
下一篇
04.HDFS之API操作
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
NIO
LeetCode刷题
数据结构和算法
JVM
Hive
MyBatis-Plus
FileBeat
Zookeeper
机器学习
锁
Azkaban
持有对象
ClickHouse
微服务
gorm
JavaWeb
队列
Yarn
递归
数学
Golang基础
算法
并发线程
Tomcat
栈
pytorch
Beego
Jenkins
VUE
Python
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭