您的位置:首页 > 运维架构

Hadoop笔记四之Hdfs文件读写操作

2016-07-19 22:04 330 查看
读操作

1:FileSystem对象会调用open方法访问NameNode。FileSystem实际上是DistributedFileSystem实例,此实例中包含DFSClient属性,再通过此属性调用ClientProtocol从而实现访问namenode。

2:NameNode会读取已经存在于内存的fsimage文件从中找出block信息并返回第一批block地址,每个block会按照副本数返回多个地址,每个地址位于不同的DataNode上,这些block地址都是经过Hadoop拓扑排序,离DFSClient最近的排在第一位其他依次类推。

3:获取地址之后DFSClient会调用FSDataInputStream读取block信息,当第一批block读完后会再去NameNode拿第二批block地址,直到所有的block都读完最后关闭FSDataInputStream。在这个一过程中数据是持续不断的从DataNode流向DFSClient的。

4:如果FSDataInputStream在读取block时和DataNode通讯中断,FSDataInputStream就会尝试读取排在第二位的block地址就是另一个DataNode。读取剩余block时就会跳过出现异常的DataNode。另外FSDataInputStream每发现一个坏的DataNode就会报告给NameNode。



写操作

1:FileSystem对象会调用create方法通过ClientProtocol访问NameNode向它申请空间执行写操作。

2:NameNode会检查是否有空闲空间/是否有权限/文件是否已存在等,不通过会报IO异常。通过后在edits文件中为其分配DataNode并将第一个block地址分配给DFSClient。

3:DFSClient会通过DFSOutputStream向DataNode中写数据,如果按照副本数还有其他的DataNode(副本为3就会有3个DataNode),当第一个DataNode写完后剩余的DataNode之间会进行通讯依次向其他DataNode写入数据,每个DataNode写完毕后会告诉前面的DataNode已经写完了,当所有的DataNode写完后DFSClient会调用close方法关闭DFSOutputStream,NameNode会更新自己的信息,此时DFSClient就会看到之前写入的信息。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Hadoop hdfs rpc