之前,我们已经学习过了HDFS的读写数据流程,详情请看
《Hadoop深入学习:HDFS主要流程——写文件》,近来鄙人在看《Hadoop:The Definiyive Guide(3rd edition)》,发现之前的体会还有些不足,故在本章中,我们再来重温一下Client是如何向Hadoop的HDFS中写数据的。
下面我们来先看看下面的“写”流程图:
假如我们有一个文件test.txt,想要把它放到Hadoop上,执行如下命令:
引用
# hadoop fs -put /usr/bigdata/dataset/input/20130706/test.txt /opt/bigdata/hadoop/dataset/input/20130706 //或执行下面的命令
# hadoop fs -copyFromLocal /usr/bigdata/dataset/input/20130706/test.txt /opt/bigdata/hadoop/dataset/input/20130706
整个写流程如下:
第一步,客户端调用DistributedFileSystem的create()方法,开始创建新文件:DistributedFileSystem创建DFSOutputStream,产生一个RPC调用,让NameNode在文件系统的命名空间中创建这一新文件;
第二步,NameNode接收到用户的写文件的RPC请求后,谁偶先要执行各种检查,如客户是否有相关的创佳权限和该文件是否已存在等,检查都通过后才会创建一个新文件,并将操作记录到编辑日志,然后DistributedFileSystem会将DFSOutputStream对象包装在FSDataOutStream实例中,返回客户端;否则文件创建失败并且给客户端抛IOException。
第三步,客户端开始写文件:DFSOutputStream会将文件分割成packets数据包,然后将这些packets写到其内部的一个叫做data queue(数据队列)。data queue会向NameNode节点请求适合存储数据副本的DataNode节点的列表,然后这些DataNode之前生成一个Pipeline数据流管道,我们假设副本集参数被设置为3,那么这个数据流管道中就有三个DataNode节点。
第四步,首先DFSOutputStream会将packets向Pipeline数据流管道中的第一个DataNode节点写数据,第一个DataNode接收packets然后把packets写向Pipeline中的第二个节点,同理,第二个节点保存接收到的数据然后将数据写向Pipeline中的第三个DataNode节点。
第五步,DFSOutputStream内部同样维护另外一个内部的写数据确认队列——ack queue。当Pipeline中的第三个DataNode节点将packets成功保存后,该节点回向第二个DataNode返回一个确认数据写成功的信息,第二个DataNode接收到该确认信息后在当前节点数据写成功后也会向Pipeline中第一个DataNode节点发送一个确认数据写成功的信息,然后第一个节点在收到该信息后如果该节点的数据也写成功后,会将packets从ack queue中将数据删除。
在写数据的过程中,如果Pipeline数据流管道中的一个DataNode节点写失败了会发生什问题、需要做哪些内部处理呢?如果这种情况发生,那么就会执行一些操作:
首先,Pipeline数据流管道会被关闭,ack queue中的packets会被添加到data queue的前面以确保不会发生packets数据包的丢失;
接着,在正常的DataNode节点上的以保存好的block的ID版本会升级——这样发生故障的DataNode节点上的block数据会在节点恢复正常后被删除,失效节点也会被从Pipeline中删除;
最后,剩下的数据会被写入到Pipeline数据流管道中的其他两个节点中。
如果Pipeline中的多个节点在写数据是发生失败,那么只要写成功的block的数量达到
dfs.replication.min(默认为1),那么就任务是写成功的,然后NameNode后通过一步的方式将block复制到其他节点,最后事数据副本达到
dfs.replication参数配置的个数。
第六步,,完成写操作后,客户端调用close()关闭写操作,刷新数据;
第七步,,在数据刷新完后NameNode后关闭写操作流。到此,整个写操作完成。

- 大小: 56.8 KB
分享到:
相关推荐
《Hadoop技术内幕》系列书籍包含了MapReduce、YARN和HDFS三个核心组件的深入解析,是理解Hadoop生态系统不可或缺的资源。以下是这些主题的详细概述: **Hadoop MapReduce** MapReduce是Hadoop处理大数据的主要计算...
### Hadoop学习总结之二:深入理解HDFS读写过程 #### 一、HDFS文件读取流程详解 Hadoop的分布式文件系统(HDFS)是大数据存储与处理的重要基石,其读写机制的设计旨在优化大规模数据集的访问效率与容错性。本文将...
根据提供的文件信息,本文将深入解析《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》这本书中的关键知识点,主要包括Hadoop的核心组件——MapReduce的设计理念、架构组成及其具体的实现原理。 ### Hadoop...
《Hadoop技术内幕:深入解析HADOOP COMMON和HDFS架构设计与实现原理》这本书是IT领域的经典之作,专门探讨了Hadoop生态系统中的两大核心组件——Hadoop Common和HDFS(Hadoop Distributed File System)的架构设计与...
本次实验旨在通过对Hadoop分布式文件系统(HDFS)进行运行测试,深入理解并掌握Hadoop及其核心组件之一——HDFS的基本原理与操作方法。随着大数据时代的到来,如何高效地存储和处理海量数据成为了一个重要的技术挑战...
6. **Hadoop分布式文件系统(HDFS)**:MapReduce与HDFS紧密配合,HDFS提供高可用性和可扩展性的分布式存储,使得数据可以跨多台服务器分布,便于MapReduce进行并行处理。 7. **JobTracker与TaskTracker**:在早期...
内容概要:本文档主要探讨了大数据处理中关键组件之一——Hadoop分布式文件系统 (HDFS),涵盖了HDFS架构、数据存储机制、冗余与容错处理方式,以及其实现高性能读写的策略。此外还介绍了相关配置优化技巧,确保系统...
《Hadoop技术内幕:深入解析HADOOP COMMON和HDFS架构设计与实现原理》是一本专为理解Hadoop生态系统核心组件——Hadoop Common和HDFS(Hadoop Distributed File System)设计与实现细节而编写的书籍。这本书以高清、...
### Hadoop技术内幕:深入解析MapReduce架构设计与实现原理 #### 一、Hadoop概述 Hadoop是一种能够处理大规模数据集的开源软件框架。它最初由Apache开发,旨在为海量数据提供分布式存储和计算能力。Hadoop的核心...
4. MapReduce工作流程:分析job.xml配置文件,理解JobTracker如何解析和调度任务,TaskTracker如何执行任务,以及shuffle和sort过程的实现。 5. 容错机制:探究Hadoop如何实现硬件故障的自动检测和数据恢复,如心跳...
内容概要:本文档全面概述了Hadoop分布式文件系统(HDFS)的基础命令,指导用户完成从启动到关闭整个流程的操作,并介绍常用的命令行指令,以及基于web UI的交互。同时涉及到了与HDFS有关的具体命令如创建、删除、...
《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》由Hadoop领域资深的实践者亲自执笔,首先介绍了MapReduce的设计理念和编程模型,然后从源代码的角度深入分析了RPC框架、客户端、JobTracker、TaskTracker和...
深入学习Hadoop源码,有助于理解其内部机制,如HDFS的数据块分配、心跳机制、NameNode和DataNode的角色,以及MapReduce的作业生命周期管理、JobTracker和TaskTracker的协作等。通过分析这些模块,开发者可以更好地...
《Hadoop大数据云计算课程——HDFS深度解析》 在当今数据爆炸的时代,大数据处理与分析已经成为企业竞争力的关键因素。Hadoop作为开源的大数据处理框架,以其分布式、容错性及可扩展性的特点,成为了大数据领域的...
HDFS提供高容错性的文件存储系统,而MapReduce则是一种编程模型,用于并行处理大数据集。 中文版的《Hadoop:权威指南》帮助中国读者无障碍理解这一复杂技术,书中详细解释了Hadoop的安装、配置、管理和优化,以及...
《董西城--Hadoop技术内幕--深入解析HADOOP COMMON和HDFS架构设计与实现原理》这本书是针对Hadoop生态系统中的核心组件Hadoop Common和HDFS进行深度剖析的权威指南。全书共528页,内容详实且结构清晰,带有完整的...
【云计算分布式大数据Hadoop深入浅出案例驱动实战】是一门以实战为导向的课程,由资深IT专家王家林老师主讲。课程的核心是通过案例教学,帮助学员掌握Hadoop这一强大的分布式大数据处理框架,适用于互联网企业、金融...