HDFS数据的读写过程
1.一般的文件读取操作包括:open 、read、close等
客户端读取数据过程,其中1、3、6步由客户端发起:
客户端首先获取FileSystem的一个实例,这里就是HDFS对应的实例:
①客户端调用FileSystem实例的open方法,获得这个文件对应的输入流,在HDFS中就是DFSInputStream
②构造第一步中的输入流DFSInputStream时,通过RPC远程调用NameNode可以获得NameNode中此文件对应的数据块的保存位置,包括这个文件的副本的保存位置(主要是各DataNode的地址)。注意,在输入流中会按照网络拓扑结构,根据与客户端距离对DataNode进行简单排序
③④获得此输入流之后,客户端调用read方法读取数据。输入流DFSInputStream会根据前面的排序结果,选择最近的DataNode建立连接并读取数据。如果客户端和其中一个DataNode位于一个机器中(比如MapReduce过程中的mapper和reducer),那么就会直接从本地读取数据。
⑤如果已达到数据块末端,那么关闭与这个DataNode的连接,然后重新查找下一个数据块。
不断执行②-⑤直到数据全部读完,然后调用close
⑥客户端调用close,关闭输入流DFSInputStream
另外如果DFSInputStream和DataNode通信时出现错误,或者是数据校验出错,那么DFSInputStream就会重新选择DataNode传输数据。
2、数据的写入过程 一般文件写入操作不外乎create、write、close几种,
客户端写入数据过程,其中1、3、6由客户端发起
客户端首先要获取FileStream的一个实例,这里就是HDFS的实例,
①②客户端调用FileSystem实例的create方法,创建文件。NameNode通过检查,比如文件是否存在,客户端是否拥有创建权限等;通过检查之后,在NameNode添加文件信息。注意,因为此时文件没有数据,所以NameNode上也没有文件数据块信息。创建结束后,HDFS会返回一个输出流DFSDataOutputStream给客户端。
③客户端调用输出流DFSDataOutputStream的write方法向HDFS中对应的文件写入数据。数据首先会被分包,这些分包会写入一个输入流内部队列Data队列中,接收完整数据分包,输出流DFSDataOutputStream会向nameNode申请保存文件和副本数据块的若干个DataNode,这若个个DataNode会形成一个数据传输管道。
④DFSDataOutputStream会(根据网络拓扑结构排序)将数据传输给距离上最短的DataNode,这个DataNode接收到数据包之后会传递给下一个DataNode,数据在各DataNode之间通过管道流动,而不是全部由输出流分发,这样可以减少传输开销。
⑤因为DataNode位于不同机器上,数据需要通过网络发送,所以,为了保证所有的DataNode的数据都是准确的,接收到数据的DataNode要向发送者发送确认包(ACKPacket)。对于某个数据块,只有当DFSDataOutputStream收到了所有DataNode的正确ACK,才能确认传输结束。DFSDataOutputStream内部专门维护了一个等待ACK队列,这一队列保存已经进入管道传输数据、但是并未被完全确认的数据包。
不断③-⑤直到数据全部写完,客户端调用close关闭文件。
⑥客户端调用close方法,DFSDataOutputStream继续等待直到所有数据写入完毕并被确认,调用complete方法通知NameNode文件写入完成。
⑦NameNode接收到complete消息之后,等待相应数量的副本写入完毕后,告知客户端即可。
3、在传输过程中,如果发现某个DataNode失效(未联通,ACK超时),那么HDFS执行如下操作:
①关闭数据传输的管道
②将等待ACK队列中的数据放到Data队列的头部
③更新正常DataNode中所有数据块的版本;当失效的DataNode重启之后,之前的数据块会因为版本不对而被清除。
④在传输管道中删除失效DataNode,重新建立管道并发送数据包。
HDFS数据的读写过程相关推荐
- HDFS数据的写入过程
HDFS 文件写入过程 Client 发起文件上传请求, 通过 RPC 与 NameNode 建立通讯, NameNode 检查目标文件是否已存在, 父目录是否存在, 返回是否可以上传 Client ...
- MapReduce程序的读写过程
问题导读 1.HDFS框架组成是什么? 2.HDFS文件的读写过程是什么? 3.MapReduce框架组成是什么? 4.MapReduce工作原理是什么? 5.什么是Shuffle阶段和Sort阶段? ...
- Hadoop-HDFS的数据读写过程(详细过程与图解)
目录 网络拓扑-节点距离 读过程 HDFS客户端与NameNode通信 HDFS客户端与DataNode通信 HDFS读数据的详细过程 代码实现 写数据 HDFS客户端与NameNode通信 HDFS ...
- hbase系统架构图以及各部分的功能作用,物理存储,HBase寻址机制,读写过程,Regin管理,Master工作机制
1.1 hbase内部原理 1.1.1 系统架构 Client 1 包含访问hbase的接口,client维护着一些cache来加快对hbase的访问,比如regione的位置信息. Zookeepe ...
- HDFS写入和读取过程
HDFS写入和读取过程 一.HDFS HDFS全称是Hadoop Distributed System.HDFS是为以流的方式存取大文件而设计的.适用于几百MB,GB以及TB,并写一次读多次的场合.而 ...
- HDFS dfsclient写文件过程 源码分析
HDFS写入文件的重要概念 HDFS一个文件由多个block构成.HDFS在进行block读写的时候是以packet(默认每个packet为64K)为单位进行的.每一个packet由若干个chunk( ...
- flume 一对多hdfs_10PB 规模的 HDFS 数据在 eBay 的迁移实战
导读 INTRODUCTION Hadoop分布式文件系统(HDFS)是指被设计成适合运行在通用硬件上的分布式文件系统(Distributed File System).本文将介绍eBay ADI H ...
- HDFS数据平衡:节点间平衡与节点内平衡
HDFS数据平衡:节点间平衡与节点内平衡 HDFS容易发生数据不平衡的问题. 这其中包括各个DataNode之间存储的数据量差异,以及一个DataNode内部各磁盘之间存储的数据量差异. HDFS专门 ...
- (转载)深入分析HDFS原理及读写流程
一.架构体系 1.1.什么是HDFS? HDFS即Hadoop Distributed File System的简称,采用Master/Slave主从结构模型来管理数据.在设计上采用了分而治之的思想, ...
最新文章
- memcached的应用和兼容程序
- 【PAT】A1053 Path of Equal Weight
- python人工智能_人工智能人才缺口千万!学Python抓住风口机会
- mikadonic-RHCE——NFS服务配置图解
- [转载]Qt之鼠标样式
- C语言描述的数据结构顺序表的置空 slt-size=0含义
- oracle服务器结构01
- linux zen 补丁,Mageia 7.1 发布,修复AMD Zen 2支持
- od反汇编linux,新手学习反汇编之OD寻找功能call
- 如何解决笔记本键盘某一个键一直在自动按下
- KUDU和IMPALA的结合使用
- 电脑快捷键大全详细-基础
- 顺应EMM趋势,烽火星空重磅出击
- Trojan.DL.Win32.Hmir.hl的清除方法 采用驱动提供服务的木马病毒
- 常用电平标准(TTL、CMOS、LVTTL、LVCMOS、ECL、PECL、LVPECL、RS232)
- java jdk安装失败 mac_Mac环境下JDK安装方法
- 个人金融借贷场景下,大数据风控的行业分析及应用分析
- Markdown KaTex 正负号±
- LAMP环境搭建wordpress
- 膦配体化合物催化剂-Pt(Me-Duphos)催化二取代膦氢与丙烯腈和丙烯酸酯不对称加成反应
热门文章
- excel使用小技巧
- 三部门联合推进“互联网+不动产登记”,国图一体化平台响应升级!
- cfd post session, 自动, 批量 , 后处理计算结果,
- 关于英语学习,你想怎么学习,你对英语学习的印象是什么,喜欢什么样的老师,一起来谈谈吧!
- 面试官:单核 CPU 支持 Java 多线程吗?什么?
- 暗影精灵2pro安装win10+ubuntu16.10双系统
- dec-c 怎么改语言,汇编中的dec指令是什么指令
- Freeswitch Event Socket IVR外呼方案
- RDM-Redis可视化工具图文安装教程
- windows重装系统后重用之前安装的oracle配置(转)