本篇博文首先对HDFS的重要特性和使用场景做一个简要说明,之后对HDFS的数据读写、元数据管理以及NameNode、SecondaryNamenode的工作机制进行深入分析。过程中也会对一些配置参数做一个说明。

 深刻理解HDFS作业机制(hdfs的工作机制) HDFS 机制 Then 第1张

深化了解一个技能的作业机制是灵活运用和快速处理问题的底子办法,也是仅有途径。关于HDFS来说除了要了解它的运用场景和用法以及通用分布式架构之外更重要的是了解关键进程的原理和完结细节。本篇博文首要对HDFS的重要特性和运用场景做一个扼要阐明,之后对HDFS的数据读写、元数据办理以及NameNode、SecondaryNamenode的作业机制进行深化剖析。进程中也会对一些装备参数做一个阐明。

一.HDFS的重要特性

First. HDFS是一个文件体系,用于存储和办理文件,经过一致的命名空间(类似于本地文件体系的目录树)。是分布式的,服务器集群中各个节点都有自己的人物和责任。

Then.

1.HDFS中的文件在物理上是分块存储(block),块的巨细能够经过装备参数( dfs.blocksize)来规则,默许巨细在hadoop2.x版别中是128M,之前的版别中是64M。

2.HDFS文件体系会给客户端供给一个一致的笼统目录树,客户端经过途径来拜访文件,形如:HDFS://namenode:port/dir-a/dir-b/dir-c/file.data

3.目录结构及文件分块方位信息(元数据)的办理由namenode节点承当,namenode是HDFS集群主节点,担任保护整个hdfs文件体系的目录树,以及每一个途径(文件)所对应的数据块信息(blockid及地点的datanode服务器)

4.文件的各个block的存储办理由datanode节点承当,datanode是HDFS集群从节点,每一个block都能够在多个datanode上存储多个副本(副本数量也能够经过参数设置dfs.replication,默许是3)

5.Datanode会定时向Namenode陈述自身所保存的文件block信息,而namenode则会担任坚持文件的副本数量,HDFS的内部作业机制对客户端坚持通明,客户端恳求拜访HDFS都是经过向namenode申请来进行。

6.HDFS是规划成习惯一次写入,屡次读出的场景,且不支撑文件的修正。需求频频的RPC交互,写入功能欠好。

二.HDFS写数据剖析

1.概述

客户端要向HDFS写数据,首要要跟namenode通讯以承认能够写文件并取得接纳文件block的datanode,然后客户端按次序将文件逐一block传递给相应datanode,并由接纳到block的datanode担任向其他datanode仿制block的副本。

2.写数据进程详解

 深刻理解HDFS作业机制(hdfs的工作机制) HDFS 机制 Then 第2张

1)客户端向namenode发送上传文件恳求,namenode对要上传目录和文件进行查看,判别是否能够上传,并向客户端回来查看成果。

2)客户端得到上传文件的答应后读取客户端装备,假如没有指定装备则会读取默许装备(例如副本数和块巨细默许为3和128M,副本是由客户端决议的)。向namenode恳求上传一个数据块。

3)namenode会依据客户端的装备来查询datanode信息,假如运用默许装备,那么终究成果会回来同一个机架的两个datanode和另一个机架的datanode。这称为“机架感知”战略。

机架感知:HDFS选用一种称为机架感知(rack-aware)的战略来改善数据的可靠性、可用性和网络带宽的利用率。大型HDFS实例一般运行在跨过多个机架的核算机组成的集群上,不同机架上的两台机器之间的通讯需求经过交换机。

在大多数情况下,同一个机架内的两台机器间的带宽会比不同机架的两台机器间的带广大。经过一个机架感知的进程,Namenode能够承认每个Datanode所属的机架id。一个简略但没有优化的战略便是将副本寄存在不同的机架上。

这样能够有用避免当整个机架失效时数据的丢掉,而且答应读数据的时分充分利用多个机架的带宽。这种战略设置能够将副本均匀分布在集群中,有利于当组件失效情况下的负载均衡。可是,由于这种战略的一个写操作需求传输数据块到多个机架,这添加了写的价值。在大多数情况下,副本系数是3,HDFS的寄存战略是将一个副本寄存在本地机架的节点上,一个副本放在同一机架的另一个节点上,***一个副本放在不同机架的节点上。

这种战略削减了机架间的数据传输,这就提高了写操作的功率。机架的过错远远比节点的过错少,所以这个战略不会影响到数据的可靠性和可用性。于此一起,由于数据块只放在两个(不是三个)不同的机架上,所以此战略削减了读取数据时需求的网络传输总带宽。

在这种战略下,副本并不是均匀分布在不同的机架上。三分之一的副本在一个节点上,三分之二的副本在一个机架上,其他副本均匀分布在剩余的机架中,这一战略在不危害数据可靠性和读取功能的情况下改善了写的功能。

4)客户端在开端传输数据块之前会把数据缓存在本地,当缓存巨细超越了一个数据块的巨细,客户端就会从namenode获取要上传的datanode列表。之后会在客户端和***个datanode树立衔接开端流式的传输数据,这个datanode会一小部分一小部分(4K)的接纳数据然后写入本地库房,一起会把这些数据传输到第二个datanode,第二个datanode也相同一小部分一小部分的接纳数据并写入本地库房,一起传输给第三个datanode,顺次类推。

这样逐级调用和回来之后,待这个数据块传输完结客户端后告知namenode数据块传输完结,这时分namenode才会更新元数据信息记载操作日志。

5)***个数据块传输完结后会运用相同的方法传输下面的数据块直到整个文件上传完结。

细节:

a.恳求和应对是运用RPC的方法,客户端经过ClientProtocol与namenode通讯,namenode和datanode之间运用DatanodeProtocol交互。在规划上,namenode不会主动建议RPC,而是呼应来自客户端或 datanode 的RPC恳求。客户端和datanode之间是运用socket进行数据传输,和namenode之间的交互选用nio封装的RPC。

b.HDFS有自己的序列化协议。

c.在数据块传输成功后但客户端没有告知namenode之前假如namenode宕机那么这个数据块就会丢掉。

d.在流式仿制时,逐级传输和呼应选用呼应行列来等候传输成果。行列呼应完结后回来给客户端。

c.在流式仿制时假如有一台或两台(不是悉数)没有仿制成功,不影响***成果,只不过datanode会定时向namenode陈述自身信息。假如发现反常namenode会指挥datanode删去剩余数据和完善副本。假如副本数量少于某个最小值就会进入安全形式。

安全形式:Namenode发动后会进入一个称为安全形式的特别状况。处于安全形式的Namenode是不会进行数据块的仿制的。Namenode从一切的 Datanode接纳心跳信号和块状况陈述。块状况陈述包含了某个Datanode一切的数据块列表。每个数据块都有一个指定的最小副本数。

当Namenode检测承认某个数据块的副本数目到达这个最小值,那么该数据块就会被以为是副本安全(safely replicated)的;在必定百分比(这个参数可装备)的数据块被Namenode检测承认是安全之后(加上一个额定的30秒等候时刻),Namenode将退出安全形式状况。接下来它会承认还有哪些数据块的副本没有到达指定数目,并将这些数据块仿制到其他Datanode上。

三.HDFS读数据剖析

1.概述

客户端即将读取的文件途径发送给namenode,namenode获取文件的元信息(首要是block的寄存方位信息)回来给客户端,客户端依据回来的信息找到相应datanode逐一获取文件的block并在客户端本地进行数据追加兼并然后取得整个文件。

2.读数据进程详解

 深刻理解HDFS作业机制(hdfs的工作机制) HDFS 机制 Then 第3张

1)客户端向namenode建议RPC调用,恳求读取文件数据。

2)namenode查看文件是否存在,假如存在则获取文件的元信息(blockid以及对应的datanode列表)。

3)客户端收到元信息后选取一个网络距离最近的datanode,顺次恳求读取每个数据块。客户端首要要校检文件是否损坏,假如损坏,客户端会选取别的的datanode恳求。

4)datanode与客户端简历socket衔接,传输对应的数据块,客户端收到数据缓存到本地,之后写入文件。

5)顺次传输剩余的数据块,直到整个文件兼并完结。

从某个Datanode获取的数据块有可能是损坏的,损坏可能是由Datanode的存储设备过错、网络过错或许软件bug构成的。HDFS客户端软件完结了对HDFS文件内容的校验和(checksum)查看。当客户端创立一个新的HDFS文件,会核算这个文件每个数据块的校验和,并将校验和作为一个独自的躲藏文件保存在同一个HDFS姓名空间下。

当客户端获取文件内容后,它会查验从Datanode获取的数据跟相应的校验和文件中的校验和是否匹配,假如不匹配,客户端能够挑选从其他Datanode获取该数据块的副本。

四.HDFS删去数据剖析

HDFS删去数据比较流程相对简略,只列出具体进程:

1)客户端向namenode建议RPC调用,恳求删去文件。namenode查看合法性。

2)namenode查询文件相关元信息,向存储文件数据块的datanode宣布删去恳求。

3)datanode删去相关数据块。回来成果。

4)namenode回来成果给客户端。

当用户或运用程序删去某个文件时,这个文件并没有马上从HDFS中删去。实际上,HDFS会将这个文件重命名转移到/trash目录。只需文件还在/trash目录中,该文件就能够被迅速地康复。文件在/trash中保存的时刻是可装备的,当超越这个时刻时,Namenode就会将该文件从姓名空间中删去。

删去文件会使得该文件相关的数据块被开释。留意,从用户删去文件到HDFS闲暇空间的添加之间会有必定时刻的推迟。只需被删去的文件还在/trash目录中,用户就能够康复这个文件。假如用户想康复被删去的文件,他/她能够阅读/trash目录找回该文件。/trash目录只是保存被删去文件的***副本。

/trash目录与其他的目录没有什么区别,除了一点:在该目录上HDFS会运用一个特别战略来主动删去文件。现在的默许战略是删去/trash中保存时刻超越6小时的文件。将来,这个战略能够经过一个被杰出界说的接口装备。

当一个文件的副本系数被减小后,Namenode会挑选过剩的副本删去。下次心跳检测时会将该信息传递给Datanode。Datanode遂即移除相应的数据块,集群中的闲暇空间加大。相同,在调用setReplication API完毕和集群中闲暇空间添加间会有必定的推迟。

五.NameNode元数据办理原理剖析

1.概述

首要清晰namenode的责任:呼应客户端恳求、办理元数据。

namenode对元数据有三种存储方法:

内存元数据(NameSystem)

磁盘元数据镜像文件

数据操作日志文件(可经过日志运算出元数据)

细节:HDFS不适合存储小文件的原因,每个文件都会产生元信息,当小文件多了之后元信息也就多了,对namenode会构成压力。

2.对三种存储机制的进一步解说

内存元数据便是当时namenode正在运用的元数据,是存储在内存中的。

磁盘元数据镜像文件是内存元数据的镜像,保存在namenode作业目录中,它是一个准元数据,作用是在namenode宕机时能够快速较精确的康复元数据。称为fsimage。

数据操作日志文件是用来记载元数据操作的,在每次改动元数据时都会追加日志记载,假如有完好的日志就能够复原完好的元数据。首要作用是用来完善fsimage,削减fsimage和内存元数据的距离。称为editslog。

3.checkpoint机制剖析

由于namenode自身的使命就非常重要,为了不再给namenode压力,日志兼并到fsimage就引入了另一个人物secondarynamenode。secondarynamenode担任定时把editslog兼并到fsimage,“定时”是namenode向secondarynamenode发送RPC恳求的,是准时刻或许日志记载条数为“距离”的,这样即不会糟蹋兼并操作又不会构成fsimage和内存元数据有很大的距离。由于元数据的改动频率是不固定的。

每隔一段时刻,会由secondary namenode将namenode上堆集的一切edits和一个***的fsimage下载到本地,并加载到内存进行merge(这个进程称为checkpoint)。

 深刻理解HDFS作业机制(hdfs的工作机制) HDFS 机制 Then 第4张

1)namenode向secondarynamenode发送RPC恳求,恳求兼并editslog到fsimage。

2)secondarynamenode收到恳求后从namenode上读取(经过http服务)editslog(多个,翻滚日志文件)和fsimage文件。

3)secondarynamenode会依据拿到的editslog兼并到fsimage。构成***的fsimage文件。(中心有许多进程,把文件加载到内存,复原成元数据结构,兼并,再生成文件,新生成的文件名为fsimage.checkpoint)。

4)secondarynamenode经过http服务把fsimage.checkpoint文件上传到namenode,而且经过RPC调用把文件改名为fsimage。

namenode和secondary namenode的作业目录存储结构完全相同,所以,当namenode毛病退出需求从头康复时,能够从secondary namenode的作业目录中将fsimage拷贝到namenode的作业目录,以康复namenode的元数据。

关于checkpoint操作的装备:

dfs.namenode.checkpoint.check.period=60 #查看触发条件是否满意的频率,60秒

dfs.namenode.checkpoint.dir=file://${hadoop.tmp.dir}/dfs/namesecondary

#以上两个参数做checkpoint操作时,secondary namenode的本地作业目录

dfs.namenode.checkpoint.edits.dir=${dfs.namenode.checkpoint.dir}

dfs.namenode.checkpoint.max-retries=3 #***重试次数

dfs.namenode.checkpoint.period=3600 #两次checkpoint之间的时刻距离3600秒

dfs.namenode.checkpoint.txns=1000000 #两次checkpoint之间***的操作记载

editslog和fsimage文件存储在$dfs.namenode.name.dir/current目录下,这个目录能够在hdfs-site.xml中装备的。这个目录下的文件结构如下:

 深刻理解HDFS作业机制(hdfs的工作机制) HDFS 机制 Then 第5张

包含edits日志文件(翻滚的多个文件),有一个是edits_inprogress_*是当时正在写的日志。fsimage文件以及md5校检文件。seen_txid是记载当时翻滚序号,代表seen_txid之前的日志都已经兼并完结。

$dfs.namenode.name.dir/current/seen_txid非常重要,是寄存transactionId的文件,format之后是0,它代表的是namenode里边的edits_*文件的尾数,namenode重启的时分,会依照seen_txid的数字康复。所以当你的hdfs产生反常重启的时分,必定要比对seen_txid内的数字是不是你edits***的尾数,否则会产生重启namenode时metaData的材料有短少,导致误删Datanode上剩余Block的信息。

六.总结

深化了解了以上介绍的作业机制就能够测验运用他们处理作业和学习中遇到的问题了,只需真实了解了中心原理,一切问题都能够自己找到答案。便是要不断的学习、实践、总结,再学习、再实践、再总结。这样才干扎扎实实做的超卓。共勉。

接下来会有一篇HDFS常见问题的总结。

转载请说明出处
知优网 » 深刻理解HDFS作业机制(hdfs的工作机制)

发表评论

您需要后才能发表评论