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

发布时间:2020-07-10 06:59:59 作者:wx5d42865f47214
来源:网络 阅读:247

  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确定写入的位置信息,并返回成功状态。

推荐阅读:
  1. 好程序员大数据学习路线分享Scala系列之泛型
  2. 好程序员大数据学习路线分享Scala系列之对象

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

hdfs 大数据 好程序员

上一篇:APPARENT DEADLOCK!!! 错误解决过程

下一篇:在iOS中使用ZXing库

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》