主要提及知识点:
NameNode定义及机制,DataNode定义及机制,
Hdfs运行机制,HDFS数据存储单元(Block),
NameNode祥解,SecondaryNameNode的定义,SecondaryNameNode执行合并过程,
DataNode祥解,Block的副本放置策略,HDFS读数据流程,HDFS写数据流程,安全模式
NameNode
存储"元数据" ps:如文件名称/文件大小/文件可执行权限等
元数据保存在内存中 持久化在磁盘上 加电后读入内存待用
保存文件,文件存储单元block,datanode之间的映射关系
DataNode
存储文件内容持久化于磁盘
维护Bolockid到datanode本地文件的映射关系
Hdfs运行机制
一般来说整个HDFS拥有一个名字节点(即NameNode,存储文件元数据)和多个数据节点(即DataNode,存储文件内容).
DataNode中的机制
1.数据复制机制(冗余机制)
2.故障检测机制(心跳包-检测是否宕机、块报告-安全模式下检测、数据完整性检测-校验和比较)
NameNode中的机制
1.日志文件、镜像文件
空间回收机制
HDFS数据存储单元(Block)
Block默认数据块大小为64MN,若不足64MB按照64MB占用。ps:仅是逻辑接口,不是实际占用大小。
一个文件的存储方式:按照大小被切分为若干个block,存储到不同节点上,默认情况下每个block都有三个副本。
Block大小和副本数通过client端上传文件时设置,文件上传成功后副本数可以更改,但是Block size不可变更。
如果发生某个机器A宕机,HDFS系统中实际的副本数小于设置的副本数(即blockA在此机器A上的副本丢失),那么HDFS将会从如机器B自动复制一份正常的blockA到另一台空闲的机器C上。
NameNode祥解
主要功能:接受客户端的读写服务
保存的元数据信息(metadate信息):
1.文件拥有者信息owership和执行权限permissions (该类数据保存在磁盘上名为fsimage)
2.文件包含哪些块(每个块的编号) (该类数据保存在磁盘上名为fsimage)
3.Block保存在哪个DataNode(该类数据存储在内存中 不会保存在磁盘上 当HDFS系统启动时 由DataNode启动时上报至NameNode 收到后存储在内存中)
NameNode的metadata信息在启动后会加载到内存:
1.metadata存储到磁盘文件名为"fsimage"
2.Block的位置信息不会保存到"fsimge"
3.edits文件 记录对metadata的操作日志(注:当新增文件或删除文件时并不会直接修改metadata信息及fsimage文件信息,发生时将直接记录edits文件日志,在一定时间间隔后,再根据edits记录对上述两种文件执行数据同步操作 edits文件存储在磁盘上)
工作数据都在内存上
SecondaryNameNode !面试会问!
SecondaryNameNode的主要工作是帮助NameNode合并editslog减少NameNode启动时间
SecondaryNameNode执行合并的时机:1或2满足则执行合并
1.根据配置文件设置的时间间隔fs.checkpoint.period 默认3600s
2.根据配置文件设置edits log大小 fs.checkpoint.size 规定edits文件的最大值默认是64MB
它不是NameNode的备份但它可以做一部分的元数据的数据备份,并不是实时备份.
一部分数据备份的意思是:仅仅备份在上一次合并时的fsimage数据,但在上一次合并之后创建的edits文件操作数据并不备份,也就是说在上一次合并后发生的文件操作数据将会被丢失.所以说只可以备份一部分数据.
在SecondaryNameNode合并后将获得一个新的fsimage,并发送给NameNode,替换原来的fsimage使文件得到刷新.
SecondaryNameNode执行合并过程:
Step1.将NameNode的edits和fsimage拷贝(在拷贝的同时将形成一个新的edits文件,名如edits.new)至SecondaryNameNode
Step2.然后进行merge,merge后文件名为fsimage.ckpt
Step3.merge完成后将该文件推送给NameNode
Step4.NameNode在接到合并后的文件fsimage.ckpt替换原先的fsimage.
注意:执行合并任务后的edits文件为合并任务起始时创建的edits.new文件.(合并后edits.new重命名为edits)
整体流程归纳:
用户执行一个增加或删除操作时首先刷新NameNode工作数据(在内存中),而后在执行合并时再将磁盘上的数据进行更新.
NameNode的作用即相当于计算机的分区表,根据数据在其中的位置去相应的DataNode寻找数据.
DataNode祥解
存储数据(block)
在启动DataNode线程时将会向NameNode汇报block信息
通过向NameNode发送心跳保持与其的联系(默认3s一次),如果NameNode10分钟没有收到DataNode的心跳,则认为其宕机,将会拷贝剩余正常的Block到其它的DataNode.
Block的副本放置策略
第一个副本:放置在上传文件的DataNode;如果是集群外提交,则随机挑选一台磁盘不太满,cpu不太忙的节点.
第二个副本:放置在与第一个副本不同机架的节点上.
第三个副本:放置在与第二个副本相同的机架节点上.
更多副本:随机节点
HDFS读数据流程
Step1.客户端发送读请求 调用DistributedFileSystemAPI中的open()函数至NameNode
Step2.NameNode返回block locations
Step3.调用FSDataInputStreamAPI中Read()方法"并发"读取各Block中的文件信息
Step4.取回给block文件在client合并成一个文件
Step5.关闭流
HDFS写数据流程
Step1.客户端发送读请求 调用DistributedFileSystemAPI中的create()函数传入文件名,文件大小,拥有者等信息 并发送请求至NameNode
Step2.NameNode处理分析该文件存储后应切分为多少块,每个块应存储的位置(具体存在哪一个DataNode).返回给客户端
Step3.调用FSDataOutputStreamAPI中write()方法,将其中一个block写入其中一个DataNode中,仅写入一次,剩余副本由DataNode新启动的线程继续按照副本放置规则继续写入至其他DataNode,副本写入完成后将返回ack确认信息
Step4.客户端接收到ack确认信息后 发送请求至NameNode 通知此文件写入成功
Step5.关闭流
注意:block副本的产生机制,是由被写入block的datanode自己进行该block的副本复制备份,而不是由客户端写入其他剩余副本,客户端仅写入一次block
安全模式
NameNode启动时,首先将映像文件fsimage载入内存,并执行编辑日志edits中的各项操作
一旦内存中成功建立文件系统元数据的映射,则创建一个新的fsimage文件(这个操作不需要SecondayNameNode)和一个空的编辑日志
此时NameNode运行在安全模式.即NameNode的文件系统对于客户端来说是只读的.(只会显示目录,现实文件内容等.如果尝试写/删除/重命名都会失败).
再此阶段NameNode收集各个DataNode的报告,当数据块打到最小副本数以上时,会被认为是安全的,在一定billion的数据块被确认为安全后,再过若干时间,安全模式结束
当检测到副本数不足的数据块时,该块会被复制直到达到最小副本数,系统中数据块的位置并不是由NameNode维护的,而是以块列表的形式存储在DataNode中.
注:每一次NameNode启动时都将执行安全模式当中的所有操作,首先将进入安全模式.即初始化系统阶段.
相关推荐
### 大数据、Hadoop与HDFS详解 随着信息技术的快速发展和互联网的普及,数据量呈爆炸性增长态势。传统的数据处理工具和技术已无法满足如此大规模数据的存储、管理和分析需求。为此,Apache Hadoop应运而生,它提供...
通过本文档的学习,用户能够了解如何通过Hadoop-Fuse-Dfs实现HDFS(Hadoop Distributed File System)文件系统的挂载,从而方便地在本地文件系统中访问HDFS中的数据。 #### 二、准备工作 1. **配置CDH yum源**: ...
- **文件操作**:Hadoop提供了一个名为`hadoop fs`的命令行工具,可以进行HDFS上的文件操作,如`hadoop fs -put`用于上传本地文件到HDFS,`hadoop fs -get`用于下载HDFS中的文件到本地,`hadoop fs -ls`则用于列出...
3. **Hadoop其他基础工具**:除了这两个关键文件外,Hadoop Common还包括一系列其他工具,如fs(文件系统操作工具)、dfsadmin(HDFS管理工具)、distcp(分布式复制工具)、jar(打包和运行Java应用程序工具)等,...
3. 分布式缓存:为了提高效率,LZO的库文件(包括.lzo文件和相应的索引文件)可以被添加到Hadoop的分布式缓存中,这样每个任务执行时就不需要从HDFS中下载这些文件,从而减少了网络传输开销。 4. 集成测试:压缩库...
《Flink与Hadoop的深度整合:flink-shaded-hadoop-2-uber-2.6.5-10.0.zip详解》 在大数据处理领域,Apache Flink 和 Apache Hadoop 是两个不可或缺的重要组件。Flink作为一个实时流处理框架,以其高效的事件驱动和...
【Hadoop2x-Eclipse-Plugin插件详解】 在大数据处理领域,Apache Hadoop是一个不可或缺的开源框架,它主要用于分布式存储和计算。Eclipse作为Java开发的主流集成开发环境(IDE),提供了强大的代码编辑、调试和管理...
2. **资源管理器视图**:插件提供了一个HDFS资源管理器视图,允许开发者直接在Eclipse中浏览和操作Hadoop分布式文件系统,包括上传、下载、删除文件等操作。 3. **作业提交**:开发者可以直接在Eclipse中编译、打包...
《Hadoop Common 2.7.3 在Windows平台上的配置与使用详解》 Hadoop作为一个分布式计算框架,因其高效的数据处理能力,在大数据领域备受青睐。本文将深入探讨Hadoop Common 2.7.3在Windows操作系统上的安装、配置...
Hadoop fs命令是Hadoop分布式文件系统(HDFS)的命令行接口,提供了丰富的文件操作命令,方便用户管理和维护HDFS文件系统。本文将详细介绍Hadoop fs命令的使用方法和实践操作。 基本命令 hadoop fs命令的基本语法...
《Hadoop 2.6.0:Apache与CDH版本详解》 Hadoop,作为大数据处理领域的核心组件,是开源社区的重要成果,尤其在2.6.0版本中,其功能更加完善,性能显著提升。这里我们将深入探讨两个重要的Hadoop 2.6.0发行版——...
在Ranger 2.0.0-SNAPSHOT版本中,包含了对Hadoop分布式文件系统(HDFS)的插件支持,这个名为“ranger-2.0.0-SNAPSHOT-hdfs-plugin”的压缩包正是用于实现这一功能的核心组件。 一、Ranger概述 Ranger提供了一种...
《Hadoop Common 2.2.0:Windows平台上的Java API开发详解》 Hadoop Common 2.2.0是Apache Hadoop项目的核心组件之一,它提供了Hadoop生态系统中的通用工具和服务,支持分布式存储和计算。这个版本尤其适用于在...
至此,Hadoop的分布式文件系统HDFS和MapReduce计算框架已在Windows X64环境中成功启动。你可以通过浏览器访问`http://localhost:50070`和`http://localhost:8088`,查看NameNode和ResourceManager的状态。 对于Java...
1. **配置文件管理**:确保Hadoop配置文件(如core-site.xml、hdfs-site.xml、mapred-site.xml)与Hadoop集群保持一致,避免因配置不匹配导致的问题。 2. **日志查看**:利用Eclipse的"Console"视图,可以实时查看...
《Hadoop Eclipse Plugin详解及其2.7.7版本的使用》 Hadoop Eclipse Plugin是一款强大的开发工具,它将Apache Hadoop的开发环境与Eclipse IDE紧密集成,为Hadoop开发者提供了一种高效、便捷的开发体验。这款插件...
1. **文件系统接口**:Hadoop Common提供了抽象的文件系统API,使得开发者可以透明地访问各种分布式存储系统,如HDFS、本地文件系统、S3等。在IDEA中,我们可以通过配置classpath来使用这些API,实现数据的读写操作...
这两个JAR文件分别包含了Hadoop的分布式文件系统(HDFS)和通用功能模块的实现。HDFS是Hadoop的基础,提供了高容错性和高吞吐量的数据存储。而hadoop-common-2.2.0.jar则包含了Hadoop集群中各种通用服务和工具,如...