`

hadoop中hdfs写入文件的原理剖析

阅读更多
最近忙里偷闲,充充电,虽然在四线城市,但是也要为即将到来的大数据时代最准备不是 

下面的大白话简单记录了hdfs在存储文件时都做了哪些个事情,问了将来集群问题的排查提供一些参考依据。
步入正题

创建一个新文件的过程:
第一步:客户端通过DistributedFilesystem 对象中的creat()方法来创建文件,此时,RPC会 通过一个RPC链接协议来调用namenode,并在命名空间中创建一个新文件,namenode执行各种权限以及文件isexist 的检查,dfs返回一个输出流,否则抛出 IOEXCEPTION。输出流控制一个DFSoutPutstream,负责处理数据节点和名称节点之间的通信

第二步:客户端开始通过输出流写入数据,DFSoutPutstream将客户端写入的数据分成一个个的数据包包,然后写入到dfs中的一个queue,这些queue中的数据包被dfs中的数据流管理,数据流通过一定的分发机制,将这些数据包形成副本并存放在datanode上,当前例如我们设置的dfs.replication=3,则需要将副本放在三个datanode上,这三个datanode会通过一个管线连接,数据流将包分流给管线中第一个的datanode,这个节点会存储包并且发送给管线中的第二个datanode。同样地,第二个数据节点存储包并且传给管线中第三个datanode
(我就不画流程图了,大家肯定能想明白咯 

第三步:其实第三步应该归属到第二步里面,上一步中所提到的DFSoutPutstream有一个内部等待确认queue,专门用来存放datanode收到的数据包,只有管线中所有的datanode收到副本并且存储成功返回成功标识后等待确认queue才会移除所有的数据包。大家此时可能要问了,如果在复制过程中管线中的某一个datanode 发生了故障,hadoop是如何处理的呢?这就是hadoop的容错的强大之处了;
     首先、管线会关闭,等待确认队列中的所有数据包都会被添加回到数据队列,由此可以保证数据包的完整性和顺序性
     其次、当前块中取一个正常的数据节点,使其联系namenode,将故障节点告知namenode、由此下次故障节点恢复后能将里面残留的不完整的副本文件清空。
     第三、故障节点被删除,余下的数据包继续写入到剩下的节点中。namenode注意到当前的副本不足(dfs.replication=3),则会在另外一个datanode上安排创建新的副本。

此时问题就来了(挖掘技术哪家强??  ),如果在写入期间,datanode大规模的发生故障怎么办眤??
其实这种情况很少发生但林子大了什么鸟都有是不是,我们在部署hadoop 有一个配置选项:dfs.replication.min  一般默认是1 ,意思就是说只要有一个节点成功,则hdfs就认为本次写入时成功的,后续的它本身会自己去意识到副本数的不足而去进行复制冗余。

      最后、书接上文,客户端写入完成后就会通过DistributedFilesystem 调用close()方法,该方法有一个神奇的作用,它会将数据队列剩下的所有包包都放在等待确认queue中,并等待确认,namenode中已经记录下来了所有副本存放的datanode。

看完理论知识和大家用简单地大白话分享下,可有意思了 


分享到:
评论

相关推荐

    Hadoop HDFS原理分析,技术详解

    "Hadoop HDFS原理分析" HDFS(Hadoop Distributed File System)是Hadoop项目的一部分,是一个分布式文件管理系统。HDFS的设计理念是为了存储和管理大量的数据,具有高容错性、可扩展性和高性能的特点。 HDFS的...

    hadoop-hdfs.pdf

    #### HDFS写入剖析: 1. **发请求**:客户端首先向NameNode发起写文件的请求。 2. **检查**:NameNode对客户端的请求进行合法性验证,包括检查文件是否已经存在以及客户端是否有相应的写权限。如果验证通过,则将...

    【Hadoop】HDFS的运行原理1

    【Hadoop HDFS运行原理详解】 Hadoop分布式文件系统(HDFS)是基于Google的GFS(Google File System)论文设计实现的一种大规模分布式存储系统。HDFS的主要目标是为大数据处理提供可靠、可扩展和经济高效的存储解决...

    《HDFS——Hadoop分布式文件系统深度实践》PDF

    《HDFS——Hadoop分布式文件系统深度实践》这本书是针对Hadoop分布式文件系统(HDFS)的详尽指南,旨在帮助读者深入理解HDFS的工作原理、设计思想以及在实际应用中的最佳实践。HDFS是Apache Hadoop项目的核心组件之...

    JavaWeb操作hadoop2.6 HDFS,从页面上传,下载,列表展示的demo

    2. **文件上传**:在SpringMVC中,我们可以使用`@RequestParam`注解捕获HTTP请求中的文件,然后使用HDFS API将文件写入HDFS。需要注意的是,文件上传可能需要处理大文件分块、进度显示、异常处理等问题。 3. **文件...

    大数据技术之Hadoop(HDFS文件系统).doc

    - 它被设计为一次写入,多次读取的模式,不支持频繁的文件修改,这使得HDFS非常适合进行批量数据处理和分析任务,而不是实时或交互式应用。 - HDFS不适用于作为个人云存储服务(如网盘),因为它的设计目标是为了...

    Hadoop之HDFS源代码分析 pdf

    在Hadoop中HDFS源代码分析方面,主要功能组件、体系结构、NameNode和DataNode的实现方法是关键。HDFS的主要功能组件包括HDFS的核心类和接口,体系结构涉及HDFS的整体设计,NameNode是HDFS的核心,负责管理文件系统的...

    2大数据技术之Hadoop(HDFS文件系统).doc

    Hadoop HDFS(Hadoop Distributed File System)是Apache Hadoop项目的核心组件之一,是一个分布式...理解并熟练掌握HDFS的概念、组成、操作以及其内在的工作原理,对于在大数据环境中进行有效数据管理和分析至关重要。

    Hadoop之hdfs架构详解共2页.pdf.zip

    【压缩包子文件的文件名称列表】中的"赚钱项目"与Hadoop或HDFS的主题无关,可能是上传时的误放,或者是一个未包含在本次讨论中的其他文件。 **Hadoop HDFS架构详解:** HDFS是Apache Hadoop项目的一部分,是一个...

    Hadoop(HDFS).docx

    其中,Hadoop分布式文件系统(Hadoop Distributed File System, HDFS)作为Apache Hadoop项目的核心组件之一,旨在提供高吞吐量的数据访问能力,适用于大规模数据集的存储与处理。 **定义**: HDFS是一种专门为存储...

    Hadoop技术HDFS简介共10页.pdf.zip

    【压缩包子文件的文件名称列表】:尽管“赚钱项目”看起来与Hadoop或HDFS无关,但考虑到这是一个压缩包,它可能包含其他相关的文档或资源,比如Hadoop项目实施案例、数据分析赚钱策略等。不过,这个文件名没有提供...

    hadoop之hdfs介绍共4页.pdf.zip

    《Hadoop之HDFS介绍》 Hadoop是一个开源的...在实际应用中,HDFS广泛用于日志分析、科学计算、推荐系统等领域,是大数据时代的重要基础设施。了解和掌握HDFS的原理和操作,对于从事大数据工作的专业人士至关重要。

    Hadoop技术内幕 深入解析HADOOP COMMON和HDFS架构设计与实现原理.pdf

    《Hadoop技术内幕:深入解析HADOOP COMMON和HDFS架构设计与实现原理》这本书是Hadoop技术领域的一本深入解析之作,它详尽地探讨了Hadoop的两大核心组件——HADOOP COMMON和HDFS(Hadoop Distributed File System)的...

    Hadoop源码分析HDFS数据流

    Hadoop 的 HDFS(Hadoop Distributed File System)是 Hadoop 项目中最核心的组件之一,它提供了高可靠、高-performance 的分布式文件系统。HDFS 的核心组件包括 Namenode、Datanode、Block、DataStreamer 等。其中...

    Hadoop-HDFS.docx

    HDFS特别适合一次写入、多次读取的场景,例如大数据分析任务,但不支持频繁的文件修改和低延迟的数据访问。 **1.2 HDFS优缺点** 优点: 1) 高容错性:HDFS通过数据冗余备份实现容错,当某个副本丢失时,系统可以...

    Hadoop技术HDFS数据读写流程共7页.pdf.zip

    本文件" Hadoop技术HDFS数据读写流程共7页.pdf "显然提供了关于HDFS数据读写过程的详细信息,虽然实际的文档内容无法在此直接展示,但根据标题和描述,我们可以深入探讨HDFS的数据读写流程,以及它在Hadoop生态系统...

    java 从hadoop hdfs读取文件 进行groupby并显示为条形图

    Java API提供了访问HDFS的接口,例如`org.apache.hadoop.fs.FileSystem`类,可以用于读取、写入和管理文件系统中的文件。 2. **Hadoop MapReduce**:MapReduce是Hadoop用于并行处理和分析大数据的编程模型。在GROUP...

    windows平台使用hadoop hdfs文件进行中文分词的示例代码

    为了运行这个程序,你需要将《唐诗三百首》的文本文件上传到HDFS,并在Hadoop的配置中指定输入文件路径。在Eclipse中,通过右键点击项目,选择“Run As” > “Hadoop Job”,设置好Job配置后提交作业。程序执行完成...

    Hadoop技术HDFS目录树共6页.pdf.zip

    目录树结构在HDFS中扮演着至关重要的角色,它类似于传统文件系统的目录结构,帮助用户和应用程序组织和查找文件。在HDFS中,文件和目录被创建、移动和删除,就像在Unix或Linux系统中一样。目录树通过路径名来标识...

Global site tag (gtag.js) - Google Analytics