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就会看到之前写入的信息。
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就会看到之前写入的信息。
相关文章推荐
- RPC failed; result=22, HTTP code = 411
- 详解HDFS Short Circuit Local Reads
- Hadoop_2.1.0 MapReduce序列图
- 使用Hadoop搭建现代电信企业架构
- 单机版搭建Hadoop环境图文教程详解
- hadoop常见错误以及处理方法详解
- 通过 Redis 实现 RPC 远程方法调用(支持多种编程语言)
- Java利用Sping框架编写RPC远程过程调用服务的教程
- IIS提示出现RPC服务器不可用的解决方法
- hadoop 单机安装配置教程
- hadoop的hdfs文件操作实现上传文件到hdfs
- hadoop实现grep示例分享
- RPC、RMI、SOAP的区别详解
- node.js中RPC(远程过程调用)的实现原理介绍
- Apache Hadoop版本详解
- linux下搭建hadoop环境步骤分享
- java连接hdfs ha和调用mapreduce jar示例
- java实现将ftp和http的文件直接传送到hdfs
- hadoop client与datanode的通信协议分析