• 【博学谷学习记录】超强总结,用心分享|Hadoop读写流程



    写流程简化版

    1. 客户端向NameNode请求创建文件,NameNode进行检查并响应
    2. 客户端向离它最近的DataNode1传输文件
    3. DataNode1再向DataNode2传输,DataNode2再向DataNode3传输,串行传输,以此类推
    4. 客户端接到所有DataNode返回的确认信息,传输完成
    5. 客户端再向NameNode返回成功信息

    读流程简化版

    1. 客户端向NameNode申请打开文件,NameNode进行检查并响应
    2. 客户端同时和多个DataNode创建连接,并发读取信息

    写流程详细版

    ① 请求创建文件: 客户端向服务器发起上传请求(RPC)
    ② 执行检查,判断: 1. 目标文件是否存在2. 父目录是否存在3. 客户端是否具有操作权限
    ③ 反馈标记: 给客户端反馈是否可以上传标记
    ④ 切割: 客户端将要上传的文件按照片设置的Block大小进行切片
    ⑤ 请求上传Block: 客户端向NameNode请求上传第一个Block
    ⑥ 挑选主机: 收到上传Block的请求后,会根据副本放置策略和主机的优秀程度选出N台最优主机
    ⑦ 返回主机列表: 返回最优主机列表( node1, node2, nodeN … )
    ⑧ 建立pipeline: 客户端与拓扑距离最近的主机建立pipeline
    ⑨ 传输Block: 开始传输第一个Block,传输单位是package(64k)
    ⑩ 缓存package: 收到一个package就会缓存到内存中
    11. 产生应答对列: 从最后一个DataNode开始,收到package,就会将一个ACK确认字符放入应答对列
    12. 判断应答对列: 客户端判断应答对列中的ACK是否完整完整则判断此次package发送成功继续发送第二个
    13. 落盘: 当最后一个package收到后DataNode会将缓存的所有package存储到硬盘上,也就是一个Block
    14. 循环执行: 重新执行5-13步
    15. 返回完成信息: 客户端向NameNode汇报文件上传完毕
    16. 更新元数据: NameNode更新自己内存中的元数据

    写流程思维导图


    读流程详细版

    ① 发起请求: 客户端向服务器发起下载请求
    ② 执行检查,判断: 1. 目标文件是否存在2. 父目录是否存在3. 客户端是否具有操作权限
    ③ 获取Block列表: NameNode获取文件的Block信息列表,并且对每一个Block的主机根据策略进行排序
    Block1: node1 node3 node4
    Block2: node1 node2 node4
    Block3: node2 node3 node4
    ④ 返回Block列表: 将文件的Block列表发送给客户端
    ⑤ 建立管道: 客户端分别和三个Block所在的主机建立管道
    ⑥ 读取数据: 客户端分别从三台主机读取数据,并行执行,读取单位也是package(64k)
    ⑦ 合并Block: 客户端将三个Block进行合并组成文件(字节数组的合并)

  • 相关阅读:
    springboot基于web的在线问答社区系统设计与实现毕业设计源码061628
    进程间的通信方式简介
    从零学算法191
    前端性能优化——启用文本压缩
    记录一次SQL注入src挖掘过程
    docker全家桶(基本命令、dockerhub、docker-compose)
    Windows11 环境安装Gradle
    @Autowired和@Resource注解的区别和联系
    uniapp 给自定义组件或uview等ui组件加class样式或修改样式在微信小程序不生效的情况
    ☆打卡算法☆LeetCode 29、两数相除 算法解析
  • 原文地址:https://blog.csdn.net/xz842913787/article/details/126807791