Hadoop 2.0x:HDFS写入数据宏观和微观流程
目录
- 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写入数据宏观和微观流程相关推荐
- Centos7.x Hadoop 3.x HDFS 写入文件
操作目的 1.在Linux环境下 编写HDFS写文件程序的java文件 2.编译并打包HDFS的写程序 3.执行HDFS的写程序 环境.工具说明 1.先搭建一个 Hadoop 的基础集群环境 参考:H ...
- Apache Durid 数据存储(Hadoop概述 安装 HDFS概述 数据存储遇到的问题)
Apache Durid 数据存储 Apache Durid 数据存储 1. 分布式技术 1.1 为什么需要分布式 1.1.1 计算问题 1.1.2 存储问题 1.2 分布式系统概述 1.3 分布式实 ...
- Python向hdfs写入文件与hadoop命令向hdfs写入文件
首先需要安装pyhdfs,可用如下命令安装 pip install pyhdfs 首先我们如果先用hadoop原生命令来操作hdfs(分布式文件系统)上传文件. 命令如下 hadoop fs -put ...
- Hadoop生态之HDFS
今天我们要了解的是Hadoop生态中的HDFS,什么是HDFS呢? 如果把Hadoop当作王者荣耀来分析的话,那么HDFS的功能呢.就好比我们的点券,只有你充钱了,麻花总部收到了,这时候HDFS的作用 ...
- 写入位置 0x00000004 时发生访问冲突_HDFS读取和写入数据简介
HDFS 的文件访问机制为流式访问机制,即通过 API 打开文件的某个数据块之后,可以顺序读取或者写入某个文件.由于 HDFS 中存在多个角色,且对应的应用场景主要为一次写入.多次读取的场景,因此其读 ...
- Thinking in BigData(八)大数据Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解
纯干货:Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解. 通过这一阶段的调研总结,从内部机理的角度详细分析,HDFS.MapReduce.Hbase.H ...
- Hadoop之HDFS读写数据流程
Hadoop之HDFS读写数据流程 目录 HDFS写数据流程 HDFS读数据流程 网络拓扑概念 机架感知 1. HDFS写数据流程 HDFS写数据流程,如下图 客户端通过Distributed Fil ...
- hdfs读写流程_深度探索Hadoop分布式文件系统(HDFS)数据读取流程
一.开篇 Hadoop分布式文件系统(HDFS)是Hadoop大数据生态最底层的数据存储设施.因其具备了海量数据分布式存储能力,针对不同批处理业务的大吞吐数据计算承载力,使其综合复杂度要远远高于其他数 ...
- JAVA大数据(二) Hadoop 分布式文件系统HDFS 架构,MapReduce介绍,Yarn资源调度
文章目录 1.分布式文件系统HDFS 1.HDFS的来源 2.HDFS的架构图之基础架构 2.1 master/slave 架构 2.2 名字空间(NameSpace) 2.3 文件操作 2.4副本机 ...
最新文章
- linux 信号 core,Shell 信号发送与捕捉
- 关于2021年 美赛论文 提交失败的解决方法
- 1847 奇怪的数学题(杜教筛 + Min_25 + 第二类斯特林数)
- final的8个小细节,听说只有高手才知道!你知道几个?
- yosemite php gd,Yosemite下配置PHP支持GD库FreeType
- Qt 统计文件夹的文件总大小
- 开发MT4指标和EA(自动交易系统)
- DVWA high暴力破解
- QCC3005 Line_IN 优先级
- kali linux如何更新软件源
- 律师视角下网络爬虫技术的罪与罚
- 产品设计:Material Design 学习笔记一
- aptana php 调试,AptanaStudio3+PHP程序远程调试的方法和步骤
- html5 按钮css样式修改,css样式制作的漂亮按钮
- swash编译安装教程
- vue+Element-ui table按照字母排序
- 什么牌子的蓝牙耳机音质好?适合听歌的高音质蓝牙耳机推荐
- 【ACM】kuangbin基础数论专题
- Linux软件安装失败问题,source.list用了bionic,实际上我的Linux是focal版本
- 学计算机科学导论到底有什么用,计算机科学导论