浅谈HDFS的fsimage、edit log与SecondaryNameNode

浅谈HDFS的fsimage、edit log与SecondaryNameNode

技术杂谈小彩虹2021-06-11 8:41:27170A+A-

1前言

HDFS SecondaryNameNode是干什么的?

这是道经典的基础面试题,想必大家都被面试官问过很多次。

从了解的情况看来,好多小伙伴都无法正确作答,给出的答案甚至有“不就是NameNode的热备嘛 ”。

那么本文来简单聊聊相关的知识,为节省篇幅,将SecondaryNameNode简称SNN,NameNode简称NN。

2NN与fsimage、edit log文件

NN负责管理HDFS中所有的元数据,包括但不限于文件/目录结构、文件权限、块ID/大小/数量、副本策略等等。客户端执行读写操作前,先从NN获得元数据。当NN在运行时,元数据都是保存在内存中,以保证响应时间。

显然,元数据只保留在内存中是非常不可靠的,所以也需要持久化到磁盘。NN内部有两类文件用于持久化元数据:

  • fsimage文件,以fsimage_为前缀,是序列化存储的元数据的整体快照;

  • edit log文件,以edits_为前缀,是顺序存储的元数据的增量修改(即客户端写入事务)日志。

这两类文件均存储在 ${dfs.namenode.name.dir}/current/ 路径下,查看其中的内容:

`[root@bigdata-test-hadoop10 current]# ll`
`总用量 412944`
`-rw-r--r-- 1 hdfs hdfs 46134049 6月  29 16:57 edits_0000000001876931538-0000000001877134881`
`-rw-r--r-- 1 hdfs hdfs 29205984 6月  29 17:57 edits_0000000001877134882-0000000001877229652`
`-rw-r--r-- 1 hdfs hdfs 28306206 6月  29 18:57 edits_0000000001877229653-0000000001877318515`
`-rw-r--r-- 1 hdfs hdfs 49660366 6月  29 19:57 edits_0000000001877318516-0000000001877544080`
`-rw-r--r-- 1 hdfs hdfs 50708454 6月  29 20:57 edits_0000000001877544081-0000000001877776582`
`-rw-r--r-- 1 hdfs hdfs 51308280 6月  29 21:57 edits_0000000001877776583-0000000001878012751`
`-rw-r--r-- 1 hdfs hdfs 28408745 6月  29 22:57 edits_0000000001878012752-0000000001878101834`
`-rw-r--r-- 1 hdfs hdfs  1048576 6月  29 22:58 edits_inprogress_0000000001878101835`
`-rw-r--r-- 1 hdfs hdfs 68590654 6月  29 21:57 fsimage_0000000001878012751`
`-rw-r--r-- 1 hdfs hdfs       62 6月  29 21:57 fsimage_0000000001878012751.md5`
`-rw-r--r-- 1 hdfs hdfs 69451619 6月  29 22:57 fsimage_0000000001878101834`
`-rw-r--r-- 1 hdfs hdfs       62 6月  29 22:57 fsimage_0000000001878101834.md5`
`-rw-r--r-- 1 hdfs hdfs       11 6月  29 22:57 seen_txid`
`-rw-r--r-- 1 hdfs hdfs      175 8月  27 2019 VERSION`
`[root@bigdata-test-hadoop10 current]# cat seen_txid` 
`1878101835`

可见,fsimage和edit log文件都会按照事务ID来分段。当前正在写入的edit log文件名会带有"inprogress"标识,而seen_txid文件保存的就是当前正在写入的edit log文件的起始事务ID。

在任意时刻,最近的fsimage和edit log文件的内容加起来就是全量元数据。NN在启动时,就会将最近的fsimage文件加载到内存,并重放它之后记录的edit log文件,恢复元数据的现场。

3SNN与checkpoint过程

为了避免edit log文件过大,以及缩短NN启动时恢复元数据的时间,我们需要定期地将edit log文件合并到fsimage文件,该合并过程叫做checkpoint(这个词是真正被用烂了哈)。

由于NN的负担已经比较重,再让它来进行I/O密集型的文件合并操作就不太科学了,所以Hadoop引入了SNN负责这件事。也就是说,SNN是辅助NN进行checkpoint操作的角色。

checkpoint的触发由hdfs-site.xml中的两个参数来控制。

  • dfs.namenode.checkpoint.period:触发checkpoint的周期长度,默认为1小时。

  • dfs.namenode.checkpoint.txns:两次checkpoint之间最大允许进行的事务数(即edit log的增量条数),默认为100万。

只要满足上述两个参数的条件之一,就会触发checkpoint过程,叙述如下:

  • NN生成新的edits_inprogress文件,后续的事务日志将写入该文件中,之前正在写的edit log文件即为待合并状态。

  • 将待合并的edit log文件和fsimage文件一起复制到SNN本地。

  • SNN像NN启动时一样,将fsimage文件加载到内存,并重放edit log文件进行合并。生成合并结果为fsimage.chkpoint文件。

  • SNN将fsimage.chkpoint复制回NN,并重命名为正式的fsimage文件名。

Hadoop官方给出的图示如下。虽然文件名称不同,但思想是一样的。

图片

另外,为了避免fsimage文件占用太多磁盘空间,通过dfs.namenode.num.checkpoints.retained参数可以指定保留多少个fsimage文件,默认值为2。

如果开启了NN高可用呢?

上面说的都是集群只有一个NN的情况。如果有两个NN并且开启了HA的话,SNN就没用了——checkpoint过程会直接交给Standby NN来负责。

Active NN会将edit log文件同时写到本地与共享存储(QJM方案就是JournalNode集群)上去,Standby NN从JournalNode集群拉取edit log文件进行合并,并保持fsimage文件与Active NN的同步。

图片

我是「云祁」,一枚热爱技术、会写诗的大数据开发猿!

云祁QI

云祁QI

人生,海海,破浪前行。

55篇原创内容

公众号

【数据仓库】

关于构建与优化数据仓库架构与模型设计

Hadoop数据仓库建设实践

关于OLAP数仓,这大概是史上最全面的总结!(万字干货)

浅谈大数据建模的关键技术:维度建模

维度建模技术实践——深入事实表

聊聊维度建模的灵魂所在——维度表设计

数据中台模型设计系列:维度建模初探

阿里大数据建设 - OneData体系架构

阿里的《大数据之路》吹牛了?

Kimball生命周期导论

【数据中台】

全面解读数据中台、数据仓库和数据湖

爱奇艺数据中台建设方案

快手数据中台建设 - 大数据服务化之路

理想的“数据中台”,是否真的存在?

如何利用阿里云大数据产品建设数据中台?

数据中台交付专家告诉你,数据架构的分层怎样更加合理?

10张图细致解读阿里数据中台建设之道

【数据治理】

数据治理就是数据建模?

当我们聊数据质量的时候,我们在聊些什么?

数据治理怎么做?这篇万字长文终于讲清楚了!

数字化时代,聊聊“主数据”

聊聊大数据质量监控的那些事

【技术UP】

Hive窗口函数总结与实践

Hive 热门数据分析笔试题

实战!HiveSQL电子商务消费行为分析!

面试官最爱问的「Hive调优」,17个切入点带你一举拿下

Apache Kafka 快速入门指南

师兄大厂面试遇到面试官的 Kafka 暴击三连问,快面哭了!

Apache Druid 原理与架构剖析

大白话彻底搞懂HBase Rowkey设计和实现

全网最通俗易懂的HBase架构及原理

HBase入门为什么可以这么简单?

Flink 状态一致性、端到端的精确一次(ecactly-once)保证

Apache Flink 入门技术 PPT 分享

【读书笔记】

《阿里巴巴云上数据中台之道》:解密阿里数据中台建设

《金字塔原理》:只有思考清晰,才能表达有力

《离线和实时大数据开发实战》:构建大数据开发知识体系图谱

《企业数据化最佳实践》:感受数据中台建设五步法

《大数据之路:阿里巴巴大数据实践》,DT时代的经验之谈!

点击这里复制本文地址 以上内容由权冠洲的博客整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

支持Ctrl+Enter提交

联系我们| 本站介绍| 留言建议 | 交换友链
本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除

权冠洲的博客 © All Rights Reserved.  Copyright quanguanzhou.top All Rights Reserved
苏公网安备 32030302000848号   苏ICP备20033101号-1

联系我们