zoukankan      html  css  js  c++  java
  • HDFS的写数据流程以及异常写数据流程

    一、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向客户端响应传输完成!
    客户端关闭输出流

    二、异常写流程(重要)

    ①-⑥见上

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

  • 相关阅读:
    osg::BlendFunc来设置透明度
    LCA(Tarjan)
    CODEVS1073 家族 (并查集)
    CODEVS1533 互斥的数(哈希表)
    2014-12-4
    BZOJ2661 连连看 (费用流)
    2014-11-30
    JAVA语法基础作业——动手动脑以及课后实验性问题
    课后作业01——相加
    再读大道至简第二章
  • 原文地址:https://www.cnblogs.com/ssshhh/p/12105466.html
Copyright © 2011-2022 走看看