本节我们主要学习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技术内幕:深入解析YARN架构设计与实现原理》是一本专注于Hadoop生态系统中资源管理和调度核心组件——YARN(Yet Another Resource Negotiator)的专著。这本书全面介绍了YARN的架构、设计思想以及实际操作...
《Hadoop源码分析——HDFS部分》 Hadoop,作为开源大数据处理的基石,其核心组件之一就是HDFS(Hadoop Distributed File System),这是一个高度容错性的分布式文件系统,设计用于运行在廉价硬件上,能够处理大规模...
《Hadoop技术内幕:深入解析HADOOP COMMON和HDFS架构设计与实现原理》这本书是IT领域的经典之作,专门探讨了Hadoop生态系统中的两大核心组件——Hadoop Common和HDFS(Hadoop Distributed File System)的架构设计与...
《HDFS设计与操作——基于Hadoop的Java实践》 Hadoop分布式文件系统(HDFS)是Apache Hadoop项目的核心组件之一,它为大规模数据处理提供了可扩展、高容错性的存储解决方案。本资料集围绕“hdfs_design.rar”这个...
本次实验旨在通过对Hadoop分布式文件系统(HDFS)进行运行测试,深入理解并掌握Hadoop及其核心组件之一——HDFS的基本原理与操作方法。随着大数据时代的到来,如何高效地存储和处理海量数据成为了一个重要的技术挑战...
在本文中,我们将深入探讨如何从零开始在CentOS操作系统上安装和配置Hadoop,这是一个分布式文件系统,为大数据处理提供了强大的支持。首先,我们需要理解Hadoop的基本概念和它的核心组件。 Hadoop是由Apache软件...
根据提供的文件信息,本文将深入解析《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》这本书中的关键知识点,主要包括Hadoop的核心组件——MapReduce的设计理念、架构组成及其具体的实现原理。 ### Hadoop...
实验二:“熟悉常用的HDFS操作”旨在帮助学习者深入理解Hadoop分布式文件系统(HDFS)在大数据处理中的核心地位,以及如何通过Shell命令和Java API进行高效操作。HDFS在Hadoop架构中扮演着存储大数据的核心角色,为...
《Hadoop技术内幕:深入解析HADOOP COMMON和HDFS架构设计与实现原理》是一本专为理解Hadoop生态系统核心组件——Hadoop Common和HDFS(Hadoop Distributed File System)设计与实现细节而编写的书籍。这本书以高清、...
《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》是关于大数据处理领域的一本经典著作,专注于探讨Hadoop的核心组件——MapReduce。MapReduce是Google提出的一种分布式计算模型,被广泛应用于海量数据的...
Hadoop是Apache软件基金会开发的一个开源分布式计算框架,主要由Hadoop Distributed File System (HDFS)和MapReduce两部分组成。HDFS提供高容错性的分布式存储,可以将大文件分割成多个块并存储在多台服务器上,确保...
Map-Reduce的过程解析.doc**、**Hadoop学习总结之五:Hadoop的运行痕迹.doc**、**Hadoop学习总结之二:HDFS读写过程解析.doc**:这些文档详细介绍了Hadoop分布式文件系统(HDFS)的基本概念、工作流程以及MapReduce...
本课程将深入探讨Hadoop的核心组件之一——HDFS(Hadoop Distributed File System),帮助学员全面理解和掌握这一强大的分布式文件系统。 HDFS是Apache Hadoop项目的重要组成部分,设计目标是存储和处理PB级别的...
- 书籍:《Hadoop权威指南》、《Hadoop实战》等深入学习Hadoop生态系统。 总结,掌握Hadoop高级编程不仅是提升大数据处理能力的关键,也是解决实际业务挑战的重要手段。通过不断学习和实践,可以有效地构建和实现...
【标题】:“Hadoop学习整理的文档” 【文档概述】: Hadoop是Apache软件基金会开发的一个开源分布式计算框架,主要...通过深入学习和实践,你可以掌握处理大规模数据所需的技能,为大数据处理和分析打下坚实基础。
- **Step2:学习HDFS命令**:学习使用HDFS的命令行工具,如`hadoop fs -put`, `-get`, `-ls`, `-mkdir`, `-rm`等,进行文件上传、下载、查看目录、删除文件等操作。 - **Step3:HDFS实践**:进行实际操作,模拟数据...
"Gi盘——基于hadoop的分布式网盘项目"是一个开源的、基于Hadoop技术实现的分布式文件存储系统,旨在提供类似网盘的功能。Hadoop是一个广泛使用的开源框架,主要用于处理和存储大规模数据集,它利用分布式计算来提高...
首先,让我们深入了解一下Hadoop的两个主要组件: 1. **Hadoop分布式文件系统(HDFS)**:HDFS是Hadoop的核心,它是一个高度容错性的系统,设计用来运行在廉价硬件上。它提供高吞吐量的数据访问,非常适合大规模...