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会自动维护副本数!

  • 相关阅读:
    解决clipboard.js在移动端复制失败的问题
    在HTML中使用JavaScript(浏览器对js的加载机制分析)
    前端mv框架下(目前写的是vue),对组件抽象的思考
    github在不同电脑上协同开发
    日语五十音图快速记忆法——看了这个,真的很好记
    Day2 CSE101 L2
    PRISM概率模型检测器初使用骰子模型
    PRISM概率模型检测器初使用(2)嵌入式控制系统模型
    Day1 CSE101 L1
    prism model check 的环境安装设置
  • 原文地址:https://www.cnblogs.com/ssshhh/p/12105466.html
Copyright © 2011-2022 走看看