以下为《大数据HDFS读写数据》的无排版文字预览,完整内容请下载
读:
步骤1:客户端调用FileSystem的get()方法得到一个实例fs(即分布式文件系统DistributedFileSystem),然后fs调用open()打开希望读取的文件;
步骤2:DistributedFileSystem(fs)通过使用RPC调用NameNode以确定文件起始block的位置。(Block位置信息存储在namenode的内存中)。对于每一个bolck,NameNode返回block所有复本的DataNode地址(并根据与client的距离排序)。
步骤3:DistributedFileSystem(fs).open()返回一个FSDataInputStream对象给client用来读数据。FSDataInputStream封装了分布式文件输入流(DFSInputStream)用于管理NameNode和DataNode的I/O. client对这个输入流调用read()方法。
步骤4:此输入流DFSInputStream has stored the datanode addresses for the first few blocks in the file, then connects to the first(closest) datanode for the first block in the file.通过 内容过长,仅展示头部和尾部部分文字预览,全文请查看图片预览。 有权限新建文件,如果检查不通过,则创建失败并向client抛出IOException异常,否则namenode就会创建一条记录。
步骤3:然后DistributedFileSystem(fs)向client返回一个FSDataOutputStream(封装了DFSOutputStream)对象来写数据。在client写数据时,DFSOutputStream将它分成一个个的数据包并写入内部队列,称作数据队列(data queue)。
步骤4:DFSOutputStream会请求namenode在合适的datanodes(默认3个)上分配blocks来存储数据队列。3个datanodes形成一个管线DataStreamer将数据包流式的传输到管线中第一个datanode,第一个datanode存储数据包并发送到第二个datanode, 第二个datanode存储数据包并发送到第三个datanode。
步骤5:DFSOutputStream也维护了一个确认队列(ack queue),当收到管道中所有datanodes的确认信息后对应数据包才会从确认队列中删除。
步骤6:Client完成数据的写入后便对FSDataOutputStream调用close()方法。
步骤7:该操作将所有剩余的数据包写入管线,并等待确认,最后向namenode报告写完成。
[文章尾部最后300字内容到此结束,中间部分内容请查看底下的图片预览]请点击下方选择您需要的文档下载。
以上为《大数据HDFS读写数据》的无排版文字预览,完整内容请下载
大数据HDFS读写数据由用户“ljg8432418”分享发布,转载请注明出处