美文网首页好程序员大数据
好程序员大数据培训分享HDFS读流程

好程序员大数据培训分享HDFS读流程

作者: ab6973df9221 | 来源:发表于2019-08-28 14:39 被阅读0次

    好程序员大数据培训分享HDFS读流程

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

    好程序员大数据培训:http://www.goodprogrammer.org/

    相关文章

      网友评论

        本文标题:好程序员大数据培训分享HDFS读流程

        本文链接:https://www.haomeiwen.com/subject/njnpectx.html