1.HDFS元数据管理机制
计算机中存储数据两种:内存或者是磁盘
元数据存储磁盘:存储磁盘无法面对客户端对元数据信息的任意的快速低延迟的响应,但是安全性高
元数据存储内存:元数据存放内存,可以高效的查询以及快速响应客户端的查询请求,数据保存在内存,如果断点,内存中的数据全部丢失。
权衡:内存+磁盘;NameNode内存+FsImage的文件(磁盘)
两个合并=完整数据:NameNode引入了一个edits文件(日志文件:只能追加写入)edits文件记录的是client的增删改操作
2.元数据管理流程图
第一阶段:NameNode启动
1.第一次启动NameNode格式化后,创建Fsimage和Edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。
2.客户端对元数据进行增删改的请求。
3.NameNode记录操作日志,更新滚动日志。 NameNode在内存中对数据进行增删改。
第二阶段:Secondary NameNode工作
1.Secondary NameNode询问NameNode是否需要CheckPoint。直接带回NameNode是否执行检查点操作结果。
2.Secondary NameNode请求执行CheckPoint。
3.NameNode滚动正在写的Edits日志。
4.将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode。
5.Secondary NameNode加载编辑日志和镜像文件到内存,并合并。
6.生成新的镜像文件fsimage.chkpoint。
7.拷贝fsimage.chkpoint到NameNode
8.NameNode将fsimage.chkpoint重新命名成fsimage。
1.Fsimage中为什么没有记录块所对应DataNode?
在集群启动后,NameNode要求DataNode上报数据块信息,并间隔一段时间后再次上报。
在集群启动后,NameNode要求DataNode上报数据块信息,并间隔一段时间后再次上报。
2.NameNode启动时如何确定加载哪些Edits文件呢?
需要借助fsimage文件最后数字编码,来确定哪些edits之前是没有合并到fsimage中,启动时只需要加载那些未合并的edits文件即可。
需要借助fsimage文件最后数字编码,来确定哪些edits之前是没有合并到fsimage中,启动时只需要加载那些未合并的edits文件即可。