栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

HDFS读写数据流程

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

HDFS读写数据流程

本文简介:HDFS读写数据流程


HDFS读数据流程
  1. HDFS客户端创建DistributedFileSystem对象,执行open()方法请求打开一个文件。
  2. DistributedFileSystem对象向名称节点请求得到文件开始位置的数据块(DataBlock)的位置信息,NameNode返回信息并按存储数据块的DataNode离client远近进行排序。
  3. DistributedFileSystem对象利用DFSInputSystem创建FSDataInputStream对象,客户端通过FSDataInputStream对象请求读取read()数据,找出首个文件数据块所在的DataNode节点并读取数据块。
  4. 首个数据块读取完成后,DFSInputStream关闭与该DataNode的连接,并重复调用read()函数,接着读取下一个数据块,直至全部文件块读完为止。
  5. 每读取完一个文件块都要进行Checksum验证,一旦从DataNode上读取数据出现了错误,客户端首先告知NameNode,并查找该数据块在集群数据节点上的其它位置信息以继续读取。
  6. 当前数据块被正确读取完毕后,关闭当前的DataNode节点链接并寻找下一个待读取的DataNode节点。如果文件读取还没有完成,DFSInputStream会继续从Namenode上读取下一批文件块的位置信息继续读取数据。
  7. 客户端将所需要的文件读取完毕后,将调用FSDataInputStream的close()方法关闭所有的数据流读取。

HDFS写数据流程
  1. 客户端通过调用DistributedFileSystem类中的create()方法创建文件请求,调用create()方法将创建一个文件输出流对象(FSDataOutputStream)。
  2. FSDataOutputStream对象向远程的名称节点(NameNode)发出RPC调用请求,NameNode节点检查该待写入文件是否存在及客户端的写入权限,检查通过之后,在NameNode上创建一个写入文件的元数据。
  3. 客户端通过调用FSDataOutputStream对象的write()方法请求写数据,所要写入的数据先载入到缓冲区中,然后切分成大小相等的数据块(DataBlock)。
  4. 每个数据块按照NameNode上的节点分配传输数据块到对应的数据节点(DataNode)上。
  5. 数据节点依次反向返回确认信息给第一个数据节点,并将所有的确认信息返回。client收到应答后,将删除队列中的ACK Packet,写入到下一数据节点中。
  6. 文件写入完成后,客户端将调用close()方法关闭FSDataOutputStream。
  7. 最后,客户端调用complete()方法通知NameNode文件写入成功。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/686163.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号