本节我们主要学习HDFS主流程中的写文件的整个流程。
向HDFS中写入数据,即使不考虑节点出戳后的故障处理,也是最复杂的流程。
相关的些命令有:
hadoop fs -put example.txt //写单个文件
hadoop fs -CopyFromLocal /data/test/foo /data/test //写多个文件
在向HDFS的写操作中,不得不提以下
“数据流管道”。数据流管道在Google实现他们的分布式文件系统(GFS)时就已引入,
其目的是:在写一份数据的多个副本时,可以充分利用集群中每一台机器的带宽,避免网络瓶颈和高延时的连接,最小化推送所有数据的延时。
Hadoop的HDFS也实现了自己的数据流管道,如下图所示:
假设HDFS中的文件副本被配置成3个,也就是说,在该HDFS集群上,一共会有三个数据节点来保存一个数据文件的副本。在写数据的时候,不是同时往三个DateNode节点上写数据,而是将数据发送到第一个数据节点
DateNode 1,然后在第一个DateNode节点在本地保存数据的同时,将数据推送到第二个数据节点
DateNode 2,同理在第二个节点本地保存数据的同时,也会由第二个数据节点将数据同送给第三个数据节点
DateNode 3;确认包有最后一个数据节点产生,沿途的数据节点在确认本地写成功后,才往上游传递确认应答。这样处于管道上的每个节点都承担了写数据时的部分网络流量,降低了客户端发送多分数据时对网络的冲击。
本节我们就一向HDFSzhong写一个新文件为例,描述一个整个过程。首先先看一下流程示意图:
具体步骤如下:
1)、客户端调用DistributedFileSystem的create()方法,创建新文件(上图中的第1步),这时DistributedFileSystem创建DFSOutputStream,并由用远程调用,让NameNode节点执行同名方法在文件系统的命名空间中创建这一新文件。在DataNode中创建新节点时,需要执行各种检查,如DataNode是否处于正常状态,被创建文件是否存在,客户端是否有权限创建文件,这些检查都通过后才会创建一个新文件,并将操作记录到编辑日志。远程方法调用完后,DistributedFileSystem会将DFSOutputStream对象包装在FSDataOutStream实例中,返回客户端;
2)、在客户端写入数据时,由于之前创建的时空文件,所以FSDataOutStream对象会向NameNode节点申请数据块并得到可以保存数据块的DataNode节点,然后FSDataOutStream就会和DataNode节点联系建立数据流管道;
3)、建立数据流管道后,客户端写入FSDataOutStream流中的数据,被分成一个一个的文件包,放入FSDataOutStream流中的内部队列。该队列中的文件包最后被打包成数据包,发往数据流管道,流经管道上的各个DateNode节点并持久化;
4)、确认包按数据流管道的逆方向向上一个DataNode节点发送确认包,当客户端收到确认包后,就将对应的包从内部队列中删除;
5)、FSDataOutStream在写玩一个数据块后,数据流管道上的节点会向NameNode节点提交数据块,如果数据队列中还有待输出数据,FSDataOutStream对象会再次向NameNode申请新的数据块节点,为文件添加在新的数据块;
6)、客户端写完数据后关闭输出流,然后再通知NameNode节点关闭文件,从而完成一次正常的写文件操作。
如果在写数据期间,数据节点发生故障怎么办呢?首先数据流管道会被关闭,已经发送到管道但还没有收到确认的文件包,会重新添加到FSDataOutStream的输出队列,这样就保证了无论数据流管道中的哪个节点有故障,都不会丢失数据;然后当前正常工作的数据节点上的数据块会被赋予一个新的版本号,并通知NameNode节点,这样在失败的DataNode节点恢复过来后将删除与NameNode节点中版本号不一致的数据块,然后在数据流管道中删除错误DataNode节点并重新建立新管道连接,继续像正常的DataNode节点写数据。
、在写数据的过程中,有可能出现多于一个数据节点出现故障的情况,这时只要管道中的数据节点数目满足配置项${dfs.replication.min}的值,改制默认为1,就认为写操作是成功的,后续这些数据快后被复制,直到满足配置的${dfs.replication}的值的数目。
- 大小: 23.6 KB
- 大小: 71.5 KB
分享到:
相关推荐
Hadoop 技术内幕:深入解析Hadoop Common 和HDFS 架构设计与实现原理
java操作Hadoop源码之HDFS Java API操作-上传文件,附带所需全部jar包,欢迎下载学习。
Hadoop学习总结之二:HDFS读写过程解析
Hadoop技术内幕:深入解析Hadoop Common 和HDFS 架构设计与实现原理 (大数据技术丛书) 原版书籍,非扫描版,使用kindle可以打开,也可以转换为epub使用ibooks打开
这是hdfs的基础知识,适合初学者了解hdfs是怎么分布式存储数据和怎么写入、读出的等等
(4)上传文件:hdfs dfs -put /本地路径 /hdfs路径 (5)下载文件到本地:hdfs dfs -get /hdfs路径 /本地路径 (6)移动hdfs文件:hdfs dfs -mv /hdfs路径 /hdfs路径 (7)复制hdfs文件:hdfs dfs -cp /...
hadoop(二:hadoop3.3.0搭建,HDFS shell 命令,MapReduce程序)
Hadoop学习总结之一:HDFS简介
《Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理》由腾讯数据平台的资深Hadoop专家、X-RIME的作者亲自执笔,对Common和HDFS的源代码进行了分析,旨在为Hadoop的优化、定制和扩展提供原理性的指导。...
《Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理》还从源代码实现中对分布式技术的精髓、分布式系统设计的优秀思想和方法,以及Java语言的编码技巧、编程规范和对设计模式的精妙运用进行了总结和...
《Hadoop 2.X HDFS源码剖析》以Hadoop 2.6.0源码为基础,深入剖析了HDFS 2.X中各个模块的实现细节,包括RPC框架实现、Namenode实现、Datanode实现以及HDFS客户端实现等。《Hadoop 2.X HDFS源码剖析》一共有5章,其中...
Hadoop技术内幕:深入解析YARN架构设计与实现原理 高清完整中文版PDF下载
Maven坐标:org.apache.hadoop:hadoop-hdfs:2.7.3; 标签:apache、hdfs、hadoop、jar包、java、API文档、中英对照版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化...
Maven坐标:org.apache.hadoop:hadoop-hdfs:2.6.5; 标签:apache、hdfs、hadoop、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档...
Maven坐标:org.apache.hadoop:hadoop-hdfs:2.7.3; 标签:apache、hdfs、hadoop、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档...
• HDFS(Hadoop Distributed File System)默认的最基本的存储单位是64M的数据块。 • 和普通文件系统相同的是,HDFS中的文件是被分成64M一块的数据块存储的。 • 不同于普通文件系统的是,HDFS中,如果一个文件...
《高可用性的HDFS——Hadoop分布式文件系统深度实践》专注于Hadoop分布式文件系统(hdfs)的主流ha解决方案,内容包括:hdfs元数据解析、hadoop元数据备份方案、hadoop backup node方案、avatarnode解决方案以及最新...
主要是hdfs读写的代码分析。可依据该文档进行深入代码。
Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理(扫描版)
《HDFS——Hadoop分布式文件系统深度实践》