读取HDFS文件 写入MySQL_HDFS文件读取和文件写入过程

本文详细介绍了HDFS文件的读取和写入过程。读取过程中,客户端通过FileSystem对象打开文件,使用RPC与NameNode交互获取数据块位置,然后通过DFSInputStream连接DataNode读取数据。写入时,客户端调用create()创建文件,数据被分割并写入内部队列,DataStreamer负责将数据流式传输到DataNodes,最终由NameNode确认完成。此外,还讨论了HDFS的块副本放置策略。
摘要由CSDN通过智能技术生成

hdfs文件读取过程

90a822051935269c8a698f9ba90e123a.png

过程描述:

(1)客户端调用FileSyste对象的open()方法在分布式文件系统中打开要读取的文件。

(2)分布式文件系统通过使用RPC(远程过程调用)来调用namenode,确定文件起始块的位置。

(3)分布式文件系统的DistributedFileSystem类返回一个支持文件定位的输入流FSDataInputStream对象,FSDataInputStream对象接着封装DFSInputStream对象(存储着文件起始几个块的datanode地址),客户端对这个输入流调用read()方法。

(4)DFSInputStream连接距离最近的datanode,通过反复调用read方法,将数据从datanode传输到客户端。

(5) 到达块的末端时,DFSInputStream关闭与该datanode的连接,寻找下一个块的最佳datanode。

(6)客户端完成读取,对FSDataInputStream调用close()方法关闭连接。

hdfs文件写入过程

88ee35d3b2910bc2e5cafd2c3737d96f.png

过程描述:

写文件过程分析:

(1) 客户端通过对DistributedFileSystem对象调用create()函数来新建文件。

(2) 分布式文件系统对namenod创建一个RPC调用,在文件系统的命名空间中新建一个文件。

(3)Namenode对新建文件进行检查无误后,分布式文件系统返回给客户端一个FSDataOutputStream对象,FSDataOutputStream对象封装一个DFSoutPutstream对象,负责处理namenode和datanode之间的通信,客户端开始写入数据。

(4)FSDataOutputStream将数据分成一个一个的数据包,写入内部队列“数据队列”,DataStreamer负责将数据包依次流式传输到由一组namenode构成的管线中。

(5)DFSOutputStream维护着确认队列来等待datanode收到确认回执,收到管道中所有datanode确认后,数据包从确认队列删除。

(6)客户端完成数据的写入,对数据流调用close()方法。

(7)namenode确认完成

Block的副本放置策略

5c76a853962c51cb133339298690aea3.png

第一个副本:放置在上传文件的DN;如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点。

第二个副本:放置在于第一个副本不同的机架的节点上。

第三个副本:与第二个副本相同机架的节点。

更多副本:随机节点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值