大数据hadoop_HDFS读写流程(3)

1. HDFS写数据流程

1.1 解析文件写入过程

image-20221207170026469

(1)客户端通过Distributrd 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步)。

1.2 网络拓扑-节点距离计算

在HDFS写数据的过程中,NameNode会选择距离待上传数据最近距离的DataNode接受数据,那么怎么计算最近距离:

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

可能大多数人听到这句话已经蒙了,不知道什么意思,下面看个视频演示,然后我抽取部分进行讲解,其他的以此类推。

image-20221207165926080

机架:就是机房内的一个个服务器架子,机架r1的黄色框框看作是一个交换机,n-0,n-1,n-2是一个个服务器。

集群d1可以看作一个机房的服务器,上面的蓝色框框也可以看作是整个机架的交换机。

image-20221207162758684

我们来看我圈起来的距离计算,我们要计算节点之间的距离,首先我们应该知道怎么计算,开头的时候我们有提到,节点距离等于两个节点到达最近的共同祖先的距离总和 ,对于这个图而言,机架r2的n-0服务器,和机架r3的n-2服务器,他们之间的共同祖先是集群d1交换机,所以他们之间的距离为所有画出紫色线的箭头个数(也就是经过交换机线的个数),其它的也是这样计算,我就不一一列举了。

例如,假设有数据中心d1机架r1中的节点n1。该节点可以表示为/d1/r1/n1。利用这种标记,这里给出四种距离描述。

大家算一算每两个节点之间的距离。
image-20221207162758684]

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

1.3.1机架感知说明

(1)官方说明

官方文档说明

For the common case, when the replication factor is three, HDFS’s placement policy is to put one replica on the local machine if the writer is on a datanode, otherwise on a random datanode, another replica on a node in a different (remote) rack, and the last on a different node in the same remote rack. This policy cuts the inter-rack write traffic which generally improves write performance. The chance of rack failure is far less than that of node failure; this policy does not impact data reliability and availability guarantees. However, it does reduce the aggregate network bandwidth used when reading data since a block is placed in only two unique racks rather than three. With this policy, the replicas of a file do not evenly distribute across the racks. One third of replicas are on one node, two thirds of replicas are on one rack, and the other third are evenly distributed across the remaining racks. This policy improves write performance without compromising data reliability or read performance.

这句话啥意思呢?他说,第一块数据放在本地上,第二块数据放在其它机架的服务器上,并且第二块和第三块数都是放在另一个地方的同一个机架上。

(2)源码说明

Crtl + n 查找BlockPlacementPolicyDefault,在该类中查找chooseTargetInOrder方法。

1.3.2Hadoop3.1.3副节点选择

image-20221207165136371

2. HDFS读数据流程

image-20221207165225249

(1)客户端通过DistributedFileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。

(2)挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。

(3)DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)。

(4)客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。

他是串行读,读完第一块,再读第二块数据。读的原则是节点最近和负载均衡原则。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值