Hadoop学习笔记和总结(八)

目录

第八章 HDFS中元数据的管理

8.1 元数据

8.1.1 什么是元数据?

8.1.2 元数据存储在哪里?

8.2 元数据的写入机制

8.3 合并(CheckPoint)

8.3.1 元数据合并前

8.3.2 元数据合并(CheckPoint)

8.4 总结集群中各节点的作用

8.4.1 NameNode的作用

8.4.2 SecondaryNameNode的作用

8.4.3 DataNode的作用

第八章 HDFS中元数据的管理

8.1 元数据

8.1.1 什么是元数据?

元数据:抽象目录树、数据和数据块的映射、数据块的存储节点。存储在内存和磁盘中的元数据有所不同。

内存中存储:抽象目录树、数据和数据块的映射、数据块的存储节点

磁盘中存储:抽象目录树、数据和数据块的映射

8.1.2 元数据存储在哪里?

首先进入Hadoopdata目录,Hadoopdata目录下有三个目录:dfsnm-local-dir;dsf目录下包括:datanamenamesecondary

(1)data:数据的真实存储目录,DataNode存储数据的存储目录

(2)name:NameNode存储元数据的目录

(3)nm-local-dir:HDFS的本地缓存

对于name目录,该目录中包含4类文件:

(1)历史日志文件

日志文件,记录的是客户端对元数据操作,并且只记录操作。比如某一个用户对某一个目录执行某一种操作。

历史日志文件,即:已经编辑完成的日志文件;

例如:edits_0000000000000000001-0000000000000000002等

(2)正在编辑的日志文件

正在编辑的日志文件,即:目前对元数据修改操作记录的文件;

例如:edits_inprogress_0000000000000000398

(3)镜像文件

镜像文件就是真实的元数据;但是,是真实的元数据信息经过序列化之后的文件;集群启动时会加载这个文件,在加载的时候反序列化。(为了减少存储的容量)

例如:序列化后的文件:fsimage_0000000000000000396 

          序列化后的加密文件: fsimage_0000000000000000396.md5

序列化目的:减小文件的大小

(4)seen_txid文件

合并点记录文件:记录的是下一次需要合并的日志文件的起始偏移量。

用户上传文件或其他操作,会改变元数据,但元数据不会直接写入fsimage文件中,而是在集群空闲时,通过日志文件修改fsimage文件;这种通过日志文件修改镜像文件的操作,就叫合并;

合并点记录的就是下一次需要合并文件的起始偏移量,本例中是398,即正在编辑的文件。

8.2 元数据的写入机制

Ps:无论什么时候,内存中保存的元数据永远是最新最完整的元数据。

当用户输入hadoop fs -mkdir/put/rename等修改元数据的命令时,元数据的写入步骤如下:

(1)首先,将操作写入磁盘日志文件中(edites文件)

(2)然后,将操作写入内存中,修改内存中的元数据;修改内存中元数据目录结构;

8.3 合并(CheckPoint)

为了减小fsimage和内存元数据之间的差别,HDFS被设计为:fsimage与日志文件(edit_xxxx)定期合并。但合并是由谁来做呢?

解释分析:

合并操作由SecondaryNameNode来做,由于NameNode的职责是保存元数据,处理客户端的请求;如果再进行文件合并,会导致压力过大,所以操作由SecondaryNameNode执行。

8.3.1 元数据合并前

将fsimage与正在编辑的日志合并的过程,也叫CheckPoint过程。

在开始合并之前,SecondNameNode时刻与NameNode保持通讯,目的是监督是否达到合并条件;触发合并的条件在hdfs-default.xml中配置。

(1)时间节点:默认时间间隔3600s,即1h;

(2)元数据条数:100W条

以上两条触发条件是或的关系,满足其中一个就会触发CheckPoint过程。

8.3.2 元数据合并(CheckPoint)

根据操作日志(edit文件)改变fsimage的元数据信息。CheckPoint步骤如下:

(1)SecondNameNode不间断的向NameNode发送请求,请求CheckPoint

(2)一旦满足响应条件,NameNode则向SecondNameNode发送checkpoint响应;

(3)再次请求CheckPoint

(4)NameNode将日志文件的状态,由正在编辑转变为编辑完成;即,edit_inprogress变为edit_xxxxx,该操作也被称为回滚;于此同时,为了记录合并期间客户端对HDFS的操作,重新生成一个正在编辑的日志文件(edit_inprogress)

(5)SecondNameNode将edits文件和fsimage拉取到SecondNameNode上。其中,日志文件是上一次CheckPoint至现在的

(6)SecondNameNode将edits文件和fsimage文件加载到内存中,进行合并;合并完成的文件叫:fsimage.checkpoint

(7)SecondNameNode将fsimage.checkpoint发送给NameNode;同时会固化到磁盘,永久保存一份,可在NameNode宕机时提供恢复帮助;

(8)NameNode将fsimage.checkpoint重命名为fsimage,并替换掉原来的fsimage文件

以上就是CheckPoint的全过程

(p.s :如果没有达到checkpoint过程的这段时间,集群正常关闭,在关闭之前内存中的元数据会固化到磁盘中一份。

保证SecondaryNameNode磁盘上的元数据和内存中的一致。)

8.4 总结集群中各节点的作用

8.4.1 NameNode的作用

(1)保存元数据

(2)处理客户端的请求

(3)负责分配数据块的存储节点

(4)进行负载均衡

8.4.2 SecondaryNameNode的作用

(1)帮助NameNode做元数据备份, 帮助NameNode恢复元数据

(2)进行CheckpPoint,帮助NameNode进行元数据合并,减轻NameNode压力

8.4.3 DataNode的作用

(1)用来存储数据块

(2)处理真正的磁盘读写

(3)定期的向NameNode发送心跳报告(状态信息和数据块的位置信息)

对数据块的位置信息的补充:

(1)数据块存储在DataNode节点上;

(2)每个DataNode只知道自己节点上存储了哪些块,但并不知道这些数据块分别属于哪个文件。

(NameNode知道数据块属于哪个文件,即文件与块的对应关系)

例如:Test.txt:blk_1:[];blk_2:[](在NameNode中)

数据块的存储信息会先存为一个空的列表,在DataNode向NameNode发送块报告的时候,NameNode会把对应块的存储节点添加到列表中。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值