Hadoop-HDFS数据流详细说明

    科技2022-08-08  108

    文章目录

    一、正常写数据流程源码解释二、异常写流程三、机架感知四、读数据流程五、网络拓扑-节点距离计算

    一、正常写数据流程

    ①服务端启动HDFS中的NN和DN进程 ②客户端创建一个分布式文件系统客户端,由客户端向NN发送请求,请求上传文件 ③NN处理请求,检查客户端是否有权限上传,路径是否合法等 ④检查通过,NN响应客户端可以上传 ⑤客户端根据自己设置的块大小,开始上传第一个块,默认0-128M, NN根据客户端上传文件的副本数(默认为3),根据机架感知策略选取指定数量的DN节点返回 ⑥客户端根据返回的DN节点,请求建立传输通道 客户端向最近(网络举例最近)的DN节点发起通道建立请求,由这个DN节点依次向通道中的(距离当前DN距离最近) 下一个节点发送建立通道请求,各个节点发送响应 ,通道建立成功 ⑦客户端每读取64K的数据,封装为一个packet(数据包,传输的基本单位),将packet发送到通道的下一个节点 通道中的节点收到packet之后,落盘(检验)存储,将packet发送到通道的下一个节点! 每个节点在收到packet后,向客户端发送ack确认消息!

    ⑧一个块的数据传输完成之后,通道关闭,DN向NN上报消息,已经收到某个块 ⑨第一个块传输完成,第二块开始传输,依次重复⑤-⑧,直到最后一个块传输完成,NN向客户端响应传输完成! 客户端关闭输出流

    源码解释

    二、异常写流程

    ①-⑥见上 ⑦客户端每读取64K的数据,封装为一个packet,封装成功的packet,放入到一个队列中,这个队列称为dataQuene(待发送数据包) 在发送时,先将dataQuene中的packet按顺序发送,发送后再放入到ackquene(正在发送的队列)。 每个节点在收到packet后,向客户端发送ack确认消息! 如果一个packet在发送后,已经收到了所有DN返回的ack确认消息,这个packet会在ackquene中删除! 假如一个packet在发送后,在收到DN返回的ack确认消息时超时,传输中止,ackquene中的packet会回滚到 dataQuene。

    重新建立通道,剔除坏的DN节点。建立完成之后,继续传输! 只要有一个DN节点收到了数据且不回滚,DN上报NN已经收完此块,NN就认为当前块已经传输成功! NN会自动维护副本数!

    三、机架感知

    2.7.2默认的策略: 第一个副本放在本地机架的一个DN节点 第二个副本放在本地机架的另一个DN节点 本地机架的网络拓扑距离最多为2,速度快! 第三个副本放在其他机架的一个DN节点 为了安全性

    四、读数据流程

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

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

    在HDFS写数据的过程中,NameNode会选择距离待上传数据最近距离的DataNode接收数据。那么这个最近距离怎么计算呢? 节点距离:两个节点到达最近的共同祖先的距离总和。

    Processed: 0.012, SQL: 8