• HDFS读写流程(重点)


    @

    写数据流程

    ①服务端启动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向客户端响应传输完成!
    ⑩客户端关闭输出流
    在这里插入图片描述

    举例:

    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步)。

    @

    异常写流程

    ①-⑥见上
    ⑦客户端每读取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会自动维护副本数!

    @

    读数据流程

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

  • 相关阅读:
    用存储过程生成记录编号
    【转载】JavaScript实现密码强度检测
    【转载】汇编写的3D动画
    【整理】VS2005调试出现“无法附加 绑定句柄无效”错误解决办法
    【原创】C#中ref和out的异同
    【整理】UpdatePanel中验证控件失效问题
    【摘录】asp.net Cookie操作
    【摘录】asp.net Cookie操作(续)
    【原创】C#操作注册表(演示操作启动项)
    【整理】asp.net web.config加解密
  • 原文地址:https://www.cnblogs.com/sunbr/p/13269111.html
Copyright © 2020-2023  润新知