面经题目-详细描述下Hadoop的checkpoint流程
Hadoop的Checkpoint流程是HDFS(Hadoop Distributed File System)中维护元数据一致性的核心机制,主要用于合并NameNode的内存元数据(FsImage)与编辑日志(EditLog),从而缩短系统启动时间和降低故障恢复成本。以下是其详细流程:
1. Checkpoint触发条件
- 时间周期触发:默认每3600秒(1小时)执行一次(通过
dfs.namenode.checkpoint.period配置)。 - 事务数量触发:当EditLog的事务操作数量达到100万次(通过
dfs.namenode.checkpoint.txns配置)。
2. Checkpoint执行流程
步骤1:Secondary NameNode发起请求
- Secondary NameNode(或Checkpoint Node)定期向Active NameNode发送HTTP GET请求,查询是否需要执行Checkpoint。
- NameNode返回当前EditLog的状态信息(如最后的事务ID)。
步骤2:滚动EditLog
- NameNode停止写入当前EditLog文件(如
edits_inprogress_001),并创建一个新的EditLog文件(如edits_inprogress_002)继续记录后续操作。
步骤3:传输元数据文件
- Secondary NameNode通过HTTP GET请求从NameNode下载以下文件:
- 最新的FsImage文件(如
fsimage_000000001)。 - 待合并的EditLog文件(如
edits_001-002)。
- 最新的FsImage文件(如
步骤4:合并FsImage与EditLog
- Secondary NameNode将FsImage加载到内存,并按顺序重放EditLog中的所有事务操作,生成新的合并后的FsImage文件(如
fsimage.ckpt_000000002)。 - 合并完成后,生成新的MD5校验文件(如
fsimage.ckpt_000000002.md5)。
步骤5:上传合并结果
- Secondary NameNode通过HTTP PUT将新生成的FsImage和校验文件上传至NameNode。
步骤6:完成Checkpoint
- NameNode接收新FsImage后:
- 用新FsImage替换旧的FsImage文件。
- 删除已合并的EditLog文件。
- 更新
seen_txid文件以记录最新事务ID。
3. 关键目录与文件
- NameNode目录结构:
▼text复制代码
/hadoop/namenode/ ├── current/ │ ├── fsimage_000000000 │ ├── fsimage_000000000.md5 │ ├── edits_000001-000002 │ └── seen_txid └── in_use.lock - Secondary NameNode工作目录:
▼text复制代码
/hadoop/namesecondary/ └── current/ ├── fsimage.ckpt_000000002 └── fsimage.ckpt_000000002.md5
4. 注意事项
- 非实时备份:Secondary NameNode并非热备节点,仅用于离线合并元数据。
- 高可用(HA)场景:在启用HA的集群中,Checkpoint由Standby NameNode自动完成,无需Secondary NameNode。
- 手动触发命令:可通过
hdfs dfsadmin -saveNamespace强制触发Checkpoint。
5. 配置参数示例
▼xml复制代码<!-- hdfs-site.xml --> <property> <name>dfs.namenode.checkpoint.period</name> <value>3600</value> <!-- Checkpoint时间间隔 --> </property> <property> <name>dfs.namenode.checkpoint.txns</name> <value>1000000</value> <!-- 触发Checkpoint的事务数阈值 --> </property>
通过Checkpoint机制,Hadoop确保了元数据的高效管理和灾难恢复能力,是保障HDFS稳定运行的核心环节。
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
内容推荐
#大数据# #HDFS# Debug记一个学习过程中的小bug,困扰很久且很low的bug,希望其他大数据鱼友避坑。这是一个hdfs的api操作,通过代码控制客户端操作hdfs进行上传和下载操作。在集群启动完成并且其他配置无任何情况下,执行该代码,构建成功并没有任何报错。但在hadoop页面中查看后发现并没有执行上传操作,无文件。之后经过一系列调试检查发现是代码的顺序错误。conf.set()
10
给定 a、b 两个文件,各存放 50 亿个 url,每个 url 各占 64 字节,内存限 制是 4G,让你找出 a、b 文件共同的 url?
2
统计一篇文章中单词个数。
0
HDFS的写测试底层原理
3
Hadoop3的配置信息
2
