目录

  • HDFS写数据流程
    • 宏观流程
      • 图解
      • 描述
      • 流程
    • 微观流程
      • 流程

HDFS写数据流程

宏观流程


图解

描述

  • 写数据就是将客户端的数据上传到HDFS

流程

  • 1、 客户端向HDFS发送写数据请求

    • hdfs dfs -put user.txt /data/
  • 2、 filesystem通过rpc远程调用namenode的create方法

    • NN 会检查要创建的文件是否已经存在,创建者是否有权限进行操作。权限

      • 有:NN会针对这个文件创建一个空的Entry对象,并返回成功状态给DFS
      • 没有:直接抛出对应的异常,给予客户端错误提示信息
  • 3、 DFS如果接收到成功状态,会创建一个对象 FSDataOutputStream的对象给客户端使用

  • 4、客户端需要向NN询问第一个Block存放的位置

    • NN通过机架感知策略 (node1 node 2 node8)
  • 5、需要将客户端和DN节点创建连接

    • 通过 pipeline(管道)

      • 客户端和node1创建连接 socket
      • node1和node2创建连接 socket
      • node2 和Node8创建连接 socket
  • 6、 客户端将文件按照块block切分数据,但是按照packet发送数据

    • 默认一个packet大小为64K,Block128M为2048个packet
  • 7、 客户端通过pipeline管道开始使用FSDataOutputStream对象将数据输出。把packet以流的方式写入第一个datanode,该datanode把该packet存储之后,再将其传递给在此pipeline中的下一个datanode,直到最后一个datanode,这种写数据的方式呈流水线的形式

    • 1、客户端首先将一个packet发送给node1,同时给予node1一个ack状态
    • 2、node1接受数据后会将数据继续传递给node2,同时给予node2一个ack状态
    • 3、node2接受数据后会将数据继续传递给node8,同时给予node8一个ack状态
    • 4、node8将这个packet接受完成后,会响应这个ack给node2为true
    • 5、 node2会响应给node1 ,同理node1响应给客户端
  • 8、客户端接收到成功的状态,就认为某个packet发送成功了,直到当前块所有的packet都发送完成

  • 9、如果客户端接收到最后一个pakcet的成功状态,说明当前block传输完成,管道就会被撤销

  • 10、 客户端会将这个消息传递给NN,NN确认传输完成

    • 1、 NN会将block的信息记录到Entry,客户端会继续向NN询问第二个块的存储位置,依次类推
    • 2、block1 (node1 node2 node8)
    • 3、 block2 (node1 node8 node9)
    • 4、…
    • 5、blockn(node1 node7 node9)
  • 11、、如果传输过程中,有某个datanode出现了故障,那么当前的pipeline会被关闭,出现故障的datanode会从当前的pipeline中移除,剩余的block会继续剩下的datanode中继续以pipeline的形式传输,同时Namenode会分配一个新的datanode,保持replicas设定的数量。

  • 12、当所有的block传输完成后,NN在Entry中存储所有的File与Block与DN的映射关系关闭FsDataOutPutStream

微观流程


流程

  • 1、首先客户端从自己的硬盘以流的方式读取数据文件到自己的缓存中

  • 2、然后将缓存中的数据以chunk(512B)和checksum(4B)的方式放入到packet(64K)

    • 注意

      • 1、chunk:checksum=128:1
      • 2、checksum:在数据处理和数据通信领域中,用于校验目的的一组数据项的和
      • 3、Packet中的数据分为两类,一类是实际数据包,另一类是header包。
      • 4、一个Packet数据包的组成结构
  • 3、当packet满的时候加入到 添加到 dataqueue

  • 4、 datastreamer开始从dataqueue队列上取出一个packet,通过FSDataOPS发送到Pipleline

    • 在取出的时候,也会将packet加入到ackQueue,典型的生产者消费者模式
  • 5、客户端发送一个Packet数据包以后开始接收ack,会有一个用来接收ack的ResponseProcessor进程,如果收到成功的ack

    • 1、如果某一个packet的ack为true,那么就从ackqueue删除掉这个packet
    • 2、如果某一个packet的ack为false,将ackqueue中所有的packet重新挂载到 发送队列,重新发送
  • 6、最终DFS保存的数据格式为

    • 注意

      • 最后Packet Header 这些描述信息不要,只保留Packet Data
      • 最终所有 ChunkChecksum 写在一起,组成了 meta
      • 所有ChunkData 组成了 block

底线。。。

Hadoop 2.0x:HDFS写入数据宏观和微观流程相关推荐

  1. Centos7.x Hadoop 3.x HDFS 写入文件

    操作目的 1.在Linux环境下 编写HDFS写文件程序的java文件 2.编译并打包HDFS的写程序 3.执行HDFS的写程序 环境.工具说明 1.先搭建一个 Hadoop 的基础集群环境 参考:H ...

  2. Apache Durid 数据存储(Hadoop概述 安装 HDFS概述 数据存储遇到的问题)

    Apache Durid 数据存储 Apache Durid 数据存储 1. 分布式技术 1.1 为什么需要分布式 1.1.1 计算问题 1.1.2 存储问题 1.2 分布式系统概述 1.3 分布式实 ...

  3. Python向hdfs写入文件与hadoop命令向hdfs写入文件

    首先需要安装pyhdfs,可用如下命令安装 pip install pyhdfs 首先我们如果先用hadoop原生命令来操作hdfs(分布式文件系统)上传文件. 命令如下 hadoop fs -put ...

  4. Hadoop生态之HDFS

    今天我们要了解的是Hadoop生态中的HDFS,什么是HDFS呢? 如果把Hadoop当作王者荣耀来分析的话,那么HDFS的功能呢.就好比我们的点券,只有你充钱了,麻花总部收到了,这时候HDFS的作用 ...

  5. 写入位置 0x00000004 时发生访问冲突_HDFS读取和写入数据简介

    HDFS 的文件访问机制为流式访问机制,即通过 API 打开文件的某个数据块之后,可以顺序读取或者写入某个文件.由于 HDFS 中存在多个角色,且对应的应用场景主要为一次写入.多次读取的场景,因此其读 ...

  6. Thinking in BigData(八)大数据Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解

          纯干货:Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解. 通过这一阶段的调研总结,从内部机理的角度详细分析,HDFS.MapReduce.Hbase.H ...

  7. Hadoop之HDFS读写数据流程

    Hadoop之HDFS读写数据流程 目录 HDFS写数据流程 HDFS读数据流程 网络拓扑概念 机架感知 1. HDFS写数据流程 HDFS写数据流程,如下图 客户端通过Distributed Fil ...

  8. hdfs读写流程_深度探索Hadoop分布式文件系统(HDFS)数据读取流程

    一.开篇 Hadoop分布式文件系统(HDFS)是Hadoop大数据生态最底层的数据存储设施.因其具备了海量数据分布式存储能力,针对不同批处理业务的大吞吐数据计算承载力,使其综合复杂度要远远高于其他数 ...

  9. JAVA大数据(二) Hadoop 分布式文件系统HDFS 架构,MapReduce介绍,Yarn资源调度

    文章目录 1.分布式文件系统HDFS 1.HDFS的来源 2.HDFS的架构图之基础架构 2.1 master/slave 架构 2.2 名字空间(NameSpace) 2.3 文件操作 2.4副本机 ...

最新文章

  1. linux 信号 core,Shell 信号发送与捕捉
  2. 关于2021年 美赛论文 提交失败的解决方法
  3. 1847 奇怪的数学题(杜教筛 + Min_25 + 第二类斯特林数)
  4. final的8个小细节,听说只有高手才知道!你知道几个?
  5. yosemite php gd,Yosemite下配置PHP支持GD库FreeType
  6. Qt 统计文件夹的文件总大小
  7. 开发MT4指标和EA(自动交易系统)
  8. DVWA high暴力破解
  9. QCC3005 Line_IN 优先级
  10. kali linux如何更新软件源
  11. 律师视角下网络爬虫技术的罪与罚
  12. 产品设计:Material Design 学习笔记一
  13. aptana php 调试,AptanaStudio3+PHP程序远程调试的方法和步骤
  14. html5 按钮css样式修改,css样式制作的漂亮按钮
  15. swash编译安装教程
  16. vue+Element-ui table按照字母排序
  17. 什么牌子的蓝牙耳机音质好?适合听歌的高音质蓝牙耳机推荐
  18. 【ACM】kuangbin基础数论专题
  19. Linux软件安装失败问题,source.list用了bionic,实际上我的Linux是focal版本
  20. 学计算机科学导论到底有什么用,计算机科学导论

热门文章

  1. Python基础知识判断正误
  2. python爬虫项目讲解(scrapy-re)
  3. preact的异步渲染
  4. java实现多线程 并发和并行理解
  5. Python解码H.264(二)——将海思处理器编码的H.264裸码流转换为jpg序列
  6. 电子产品出口日本站PSE认证和METI备案需要哪些资料?
  7. 中国铁矿粉市场趋势报告、技术动态创新及市场预测
  8. 从零开始密码学生活0
  9. Kickass替代品
  10. cf----2019-10-23( Posterized,Pair Of Lines,Greedy Arkady)