ITPub博客

首页 > 大数据 > Hadoop > 好程序员大数据学习路线分享HDFS读流程

好程序员大数据学习路线分享HDFS读流程

原创 Hadoop 作者:好程序员IT 时间:2019-08-28 16:55:59 0 删除 编辑

   1. 客户端或者用户通过调用 FileSystem 对象的 Open() 方法打开需要读取的文件,这时就是 HDSF 分布式系统所获取的一个对象

   2.FileSystem 通过远程协议调用 NameNode 确定文件的前几个 Block 的位置,对于每一个 block,NameNode 返回一个含有 Block 的元数据信息,接下来 DataNode 按照上面定义的距离 (offSet 偏移量 ) 进行排序 , 如果 Client 本身即是一个 DataNode, 那么就会优先从本地 DataNode 节点读取数据 . HDFS 完成上面的工作之后返回一个 FSDatalnputStream 给客户端 , 让其从 FSDatalnputStream 中读取。 FSDatalnputStream 包装了一个类 DFSInputStream, 用来管理 DataNode 和 NameNode 的 I/O 操作。

   3.NameNode 向客户端返回一个包含了数据信息的地址 , 客户端根据地址创建一个 FSDDatalnputStream 的对象开始进行数据的读取

   4.FSDatalnputStream 根据开始存的前几个 Block 的 DataNode 地址,连接到最近 DataNode 上对数据开始从头读取,客户端会反复调用 read() 方法,以流的形式读取 DataNode 这中的数据

   5. 当读取到 Block 的结尾的时候, FSDatalnputStream 会关闭当前 DataNode 的连接然后查找能否读取下一个 Block 的 DataNode 位置信息 , 此时给客户端产生的感觉就是数据是连续读取的,也就说在读取的时候开始查找下一个块所在的地址。读取完成时需要使用 close() 方法关闭 FSDatalnputStream

   HDFS 写流程:

   1.Client 通过调用 FileSystem 类的 Create() 方法请求创建文件

   2.FileSystem 通过对 NameNode 发出远程请求 , 在 NameNode 里面创建一个新的文件 , 但是此时并不关联任何块 ,NameNode 进行很多检查来保证不存在要创建文件已经在系统中 , 同时检查是否有相当权限来创建文件,如果这些都检查完了 , 那么 NamdNode 会记录下这个新文件的信息。 FileSystem 返回一个 FSDatalnputStream 给客户端用来写入数据, FSDatalnputStream 将包装一个 DFsOutputStream 用于对 DataNode 和 NameNode 的通信 , 一旦文件创建失败 , 会给客户端返回一个 l0Exception 表示文件创建失败并停止任务

   3. 客户端开始写数据 FSDatalnputStream 把要写的数据分成包的形式将其写入到中间队列中,其中的数据有 DataStramer 来读取 ,DataStreamer 的职责就是让 NameNode 分配一个新的块通过查找对应 DataNode 来存数据 , 来存储的数据会被备份出一个副本 , 存储到其他节点完成数据写入即可

   4.FSDatalnputStream 维护了一个内部关于 packets 的队列 , 里面存放着等待被 DataNode 确认的信息 , 一旦数据信息写入 DataNode 成功后 , 就会从队列中移除

   5. 当数据完成写入之后客户会调用 close 方法 , 通过 NameNode 完成写入之前通过一个方法 flush 将残留数据一起写进去。和 NameNode 确定写入的位置信息,并返回成功状态。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69913892/viewspace-2655291/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
欢迎关注公众号:好程序员特训营 web前端教程分享 723729549 大数据教程分享 703503210

注册时间:2019-03-20

  • 博文量
    539
  • 访问量
    410820