下图是HDFS读取文件的流程:
这里是详细解释:
1.当客户端开始读取一个文件时,首先客户端从NameNode取得这个文件的前几个block的DataNode信息。(步骤1,2)
2.开始调用read(),read()方法里,首先去读取第一次从NameNode取得的几个Block,当读取完成后,再去NameNode拿下一批Block的DataNode信息。(步骤3,4,5)
3. 调用Close方法完成读取。(步骤6)
当读取一个Block时如果出错了怎么办呢。客户端会去另一个最佳的DataNode上读取这个块,并通知NameNode。
这么一系列复杂的过程对客户端都是透明的。客户端只知道源源不断的从Stream中读取数据。
写入文件:
1. 首先客户端高速NameNode:”我要创建一个文件”。NameNode会进行一系列检查,比如文件是否存在。一旦通过检查,则创建一个文件。这时候客户端就可以写入数据了。(步骤1,2)。如果文件大于一个Block的大小,则一个一个block地写入,下面的步骤是一个block的写入流程。
2. 客户端在开始写入数据时,会请求NameNode为当前block分配一个DataNode的列表给客户端来写入数据。上图中是三个,也就是数据冗余三份。数据冗余的复制是在DataNode之间完成的。(步骤3,4,5)
然后把一个block的数据分片(packet),放入一个数据发送队列进行发送。
3. 发送出去的packet会移入一个回执队列(防止丢数据)。当客户端收到全部写入成功的回执(ack packet)之后,这时会把回执队列中相应的packet删掉。
4. packet写入失败怎么办? 如果有一个节点写入失败,则停止当前流水线,把回执队列中的所有数据加到数据队列之前,保证不丢数据。重新分配一个流水线来写入数据。
*可以设置一个dfs.replication.min。代表一个block至少被写入几个节点就算成功,默认值是1,就是说只要一个block被写入1个datanode就算写入成功了。随后HDFS会自动把这个block拷贝到3个可用的节点上去。
相关推荐
《Hadoop高级编程——构建与实现大数据解决方案》本书关注用于构建先进的、基于Hadoop的企业级应用的架构和方案,并为实现现实的解决方案提供深入的、代码级的讲解。本书还会带你领略数据设计以及数据设计如何影响...
Hadoop高级编程——构建与实现大数据解决方案.rar
Hadoop学习笔记,自己总结的一些Hadoop学习笔记,比较简单。
Hadoop 学习笔记.md
hadoop学习笔记,hadoop简介,适用于hadoop入门,讲解hadoop安装,使用,基本原理,大数据,分布式等概念
hadoop 学习笔记,从搭建环境开始到具体实验。包括hdfs配置,yarn配置,分布式配置,如何编写mapreuduce 一步一步手把手,最后项目是hadoop 与 javaweb
hadoop双机热备——facebook hadoop HA的资料整理,流汗整理
Hadoop快速入门——第四章、zookeeper安装包
此压缩包主要包含的是是hadoop的7个主要的配置文件,core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、hadoop-env.sh、mapred-env.sh、yarn-env.sh精简配置优化性能,具体相关参数根据集群规模适当...
hadoop实战——初级部分学习笔记 2
我学习hadoop的笔记,并在公司做的报告,给大家共享下
云计算,hadoop,学习笔记, dd
Hadoop学习笔记
hadoop学习笔记.rarhadoop学习笔记.rarhadoop学习笔记.rarhadoop学习笔记.rarhadoop学习笔记.rarhadoop学习笔记.rarhadoop学习笔记.rar
Hadoop学习笔记AAAAAAAAAAA
踏入hadoop的世界,一个不一样的世界
Hadoop 适合初学者 Hadoop2.0 hbase 什么时候用HBase: 确信有足够多数据 确信可以不依赖所有RDBMS的额外特性(列数据类型/第二索引/事物/高级查询语言) 确信有足够硬件