最近忙里偷闲,充充电,虽然在四线城市,但是也要为即将到来的大数据时代最准备不是
下面的大白话简单记录了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。
看完理论知识和大家用简单地大白话分享下,可有意思了
下面的大白话简单记录了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。
看完理论知识和大家用简单地大白话分享下,可有意思了
发表评论
-
Sort-based Shuffle的设计与实现
2016-03-15 08:49 806原文 http://www.cnblogs.com/hsea ... -
spark的几个重要概念
2015-12-04 14:09 0本节主要记录以下几个概念 一:RDD的五大特点 二:RDD 窄 ... -
spark部署安装调试
2015-12-02 11:28 733本节记录spark下载-->编译-->安装--&g ... -
spark基本概念
2015-11-12 10:45 781记录一下课堂笔记: ... -
hadoop计算能力调度器配置
2015-10-29 10:39 1011问题出现 hadoop默认调度器是FIFO,其原理就是先按照作 ... -
HBase在各大应用中的优化和改进
2015-10-28 14:59 686Facebook之前曾经透露过Facebook的hbase架构 ... -
一篇很好的解决系统问题过程描述文章
2015-09-23 08:40 496在网上看到的一篇解决h ... -
通过GeoHash核心原理来分析hbase rowkey设计
2015-09-08 15:49 3512注:本文是结合hbase ... -
从OpenTsdb来分析rowkey设计
2015-09-06 16:04 4941讨论此问题前,先理解 ... -
HBase中asynchbase的使用方式
2015-08-25 10:32 8186Hbase的原生java 客户端是完全同步的,当你使用原生AP ... -
Mapreduce优化的点滴
2015-07-16 15:18 819注:转载 1. 使用自定义Writable 自带的Text ... -
hadoop 如何自定义类型
2015-07-15 09:37 1234记录一下hadoop 数据类型章节的笔记,以便后期使用,本文是 ... -
napreduce shuffle 过程记录
2015-07-10 11:23 754在我看来 hadoop的核心是mapre ... -
ZooKeeper伪分布式集群安装及使用
2015-02-13 08:29 9151. zookeeper介绍 ZooKeeper是一个为分 ... -
hadoop-mahout 核心算法总结
2015-02-07 10:08 1549其实大家都知道hadoop为我们提供了一个大的框架,真正的 ... -
推荐引擎内部原理--mahout
2015-01-22 11:11 568转载自:https://www.ibm.com/devel ... -
hadoop 动态添加删除节点
2015-01-20 13:39 657转自:http://www.cnblogs.com/rill ... -
hbase hadoop zookeeper
2015-01-19 14:47 0hadoop 部署手册 http://www.iteblo ... -
mapreduce 开发以及部署
2015-01-16 13:56 832前面几篇文章的梳理让我对hadoop新yarn 框架有了一 ... -
hadoop yarn几个问题的记录
2015-01-13 11:48 651本文主要介绍以下几 ...
相关推荐
"Hadoop HDFS原理分析" HDFS(Hadoop Distributed File System)是Hadoop项目的一部分,是一个分布式文件管理系统。HDFS的设计理念是为了存储和管理大量的数据,具有高容错性、可扩展性和高性能的特点。 HDFS的...
#### HDFS写入剖析: 1. **发请求**:客户端首先向NameNode发起写文件的请求。 2. **检查**:NameNode对客户端的请求进行合法性验证,包括检查文件是否已经存在以及客户端是否有相应的写权限。如果验证通过,则将...
【Hadoop HDFS运行原理详解】 Hadoop分布式文件系统(HDFS)是基于Google的GFS(Google File System)论文设计实现的一种大规模分布式存储系统。HDFS的主要目标是为大数据处理提供可靠、可扩展和经济高效的存储解决...
《HDFS——Hadoop分布式文件系统深度实践》这本书是针对Hadoop分布式文件系统(HDFS)的详尽指南,旨在帮助读者深入理解HDFS的工作原理、设计思想以及在实际应用中的最佳实践。HDFS是Apache Hadoop项目的核心组件之...
2. **文件上传**:在SpringMVC中,我们可以使用`@RequestParam`注解捕获HTTP请求中的文件,然后使用HDFS API将文件写入HDFS。需要注意的是,文件上传可能需要处理大文件分块、进度显示、异常处理等问题。 3. **文件...
- 它被设计为一次写入,多次读取的模式,不支持频繁的文件修改,这使得HDFS非常适合进行批量数据处理和分析任务,而不是实时或交互式应用。 - HDFS不适用于作为个人云存储服务(如网盘),因为它的设计目标是为了...
在Hadoop中HDFS源代码分析方面,主要功能组件、体系结构、NameNode和DataNode的实现方法是关键。HDFS的主要功能组件包括HDFS的核心类和接口,体系结构涉及HDFS的整体设计,NameNode是HDFS的核心,负责管理文件系统的...
Hadoop HDFS(Hadoop Distributed File System)是Apache Hadoop项目的核心组件之一,是一个分布式...理解并熟练掌握HDFS的概念、组成、操作以及其内在的工作原理,对于在大数据环境中进行有效数据管理和分析至关重要。
【压缩包子文件的文件名称列表】中的"赚钱项目"与Hadoop或HDFS的主题无关,可能是上传时的误放,或者是一个未包含在本次讨论中的其他文件。 **Hadoop HDFS架构详解:** HDFS是Apache Hadoop项目的一部分,是一个...
其中,Hadoop分布式文件系统(Hadoop Distributed File System, HDFS)作为Apache Hadoop项目的核心组件之一,旨在提供高吞吐量的数据访问能力,适用于大规模数据集的存储与处理。 **定义**: HDFS是一种专门为存储...
【压缩包子文件的文件名称列表】:尽管“赚钱项目”看起来与Hadoop或HDFS无关,但考虑到这是一个压缩包,它可能包含其他相关的文档或资源,比如Hadoop项目实施案例、数据分析赚钱策略等。不过,这个文件名没有提供...
《Hadoop之HDFS介绍》 Hadoop是一个开源的...在实际应用中,HDFS广泛用于日志分析、科学计算、推荐系统等领域,是大数据时代的重要基础设施。了解和掌握HDFS的原理和操作,对于从事大数据工作的专业人士至关重要。
《Hadoop技术内幕:深入解析HADOOP COMMON和HDFS架构设计与实现原理》这本书是Hadoop技术领域的一本深入解析之作,它详尽地探讨了Hadoop的两大核心组件——HADOOP COMMON和HDFS(Hadoop Distributed File System)的...
Hadoop 的 HDFS(Hadoop Distributed File System)是 Hadoop 项目中最核心的组件之一,它提供了高可靠、高-performance 的分布式文件系统。HDFS 的核心组件包括 Namenode、Datanode、Block、DataStreamer 等。其中...
HDFS特别适合一次写入、多次读取的场景,例如大数据分析任务,但不支持频繁的文件修改和低延迟的数据访问。 **1.2 HDFS优缺点** 优点: 1) 高容错性:HDFS通过数据冗余备份实现容错,当某个副本丢失时,系统可以...
本文件" Hadoop技术HDFS数据读写流程共7页.pdf "显然提供了关于HDFS数据读写过程的详细信息,虽然实际的文档内容无法在此直接展示,但根据标题和描述,我们可以深入探讨HDFS的数据读写流程,以及它在Hadoop生态系统...
Java API提供了访问HDFS的接口,例如`org.apache.hadoop.fs.FileSystem`类,可以用于读取、写入和管理文件系统中的文件。 2. **Hadoop MapReduce**:MapReduce是Hadoop用于并行处理和分析大数据的编程模型。在GROUP...
为了运行这个程序,你需要将《唐诗三百首》的文本文件上传到HDFS,并在Hadoop的配置中指定输入文件路径。在Eclipse中,通过右键点击项目,选择“Run As” > “Hadoop Job”,设置好Job配置后提交作业。程序执行完成...
目录树结构在HDFS中扮演着至关重要的角色,它类似于传统文件系统的目录结构,帮助用户和应用程序组织和查找文件。在HDFS中,文件和目录被创建、移动和删除,就像在Unix或Linux系统中一样。目录树通过路径名来标识...