Hadoop NameNode工作原理

发布于:2023-01-05 ⋅ 阅读:(183) ⋅ 点赞:(0)

1、namenode 与datanode 启动

namenode工作机制

1.第一次启动namenode格式化后,创建fsimage和edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存中。

2.客户端对元数据进行增删改的请求

3.namenode记录操作日志,更新滚动日志。

4.namenode在内存中对数据进行增删改查

secondary namenode 角色

1.secondary namenode 询问namenode是否需要checkpoint。直接带回namenode是否检查结果。

2.secondary namenode 请求执行checkpoint

3.namenode 滚动正在写的edits日志。

4.将滚动前的编辑日志和镜像文件拷贝到secondary namenode。

5.secondary namenode 加载编辑日志和镜像文件到内存,并且进行合并。

6.生成新的镜像文件fsimage.checkpoint。

7.拷贝fsimage.checkpoint 到namenode

8.namenode 将fsimage.checkpoint重新命名为fsimage.

过程示意图如下:

 

fsimage 与edits文件详解

所有的元数据信息都保存在了fsimage 和edits文件当中,这两个文件非常重要,元数据信息的保存目录配置在hdsf-site.xml配置文件当中。

在CDH中配置如下:

目录文件如下:

 

当前正在写入的edits文件名会有inprogress的标识,而seen_txid文件中保存的是当前正在写入的edits文件的id。

客户端对hdfs进行读写文件时都会先被记录在edits文件中。

edits修改时元数据也会更新,每次hdfs更新时edits先更新后客户端才会看到最新的信息。

fsimage: 是namenode中关于元数据的镜像,一般称为检查点。

一般开始时对namenode的操作都是放在edits中进行,为什么不放在fsimage

因为fsimage是namenode 的元数据的完整镜像文件 内容非常大,如果每次都加载到内存中生成树的拓扑结构是非常消耗cpu和内存的

fsiamge内容包含了namenode管理下的所有datanode中文件block,及block所在的

datanode的元数据信息。随着edits内容增大,就需要在一定的时间点进行fsimage合并。

fsimage文件当中的文件信息查看

使用命令 hdfs oiv

cd /opt/hadoop-xxx/hadoopDatas/namenodeDatas/current

hdfs oiv -i fsimage_00000000112 -p XML -o hello.xml

文件内容如下:

edits文件信息查看

查看命令 hdsf oev

cd /opt/hadoop-xxxx/hadoopDatas/dfs/nn/edits

hdfs oev -i edits_0000000000112-111 -o edit.xml -p XML

文件内容如下:

 

为什么不在namenode中完成上述的fsimage edits文件的融合操作?

namenode 需要处理大量的客户端元数据操作请求io频繁,此时再做该操作增加namenode的负担。

secondary namenode 不会有宕机的风险?

作为namenode节点的热备,secondary namenode 与 namenode 同样都是单节点

HDFS 的HA 模式

实际的应用中为了避免namonode 的单节点故障问题,往往需要引入故障转移,高可用模式。

这时可以采取多namenode方式,一个处于active服务状态,一个处于standby备用状态。但是这两个namenode角色的沟通成了问题;由于namenode 需要在内存中保存edits元数据信息

不可能在主备切换时备用namenode才从fsimage文件中获取元数据信息,所以这时就增加了JournalNode 节点。

journalNode节点扮演的角色则是在 active namenode与 standby namenode之间进行edits元数据信息的同步。

与单节点时的secondary name node 节点的功能时一样的。

journalNode 工作日志如下:

HA高可用工作示意图: