前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >hadoop集群 secondary namenode 的作用,fsiamge和edit的关系「建议收藏」

hadoop集群 secondary namenode 的作用,fsiamge和edit的关系「建议收藏」

作者头像
全栈程序员站长
发布2022-08-09 14:39:02
5260
发布2022-08-09 14:39:02
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

首先secondary namenode不是namenode的备份,而是辅助namenode管理的,分担namenode的压力。

此外,fsimage镜像文件读取数据到内存速度远快于读取edit日志文件,因此不能让edit的日志过大,所以定期把edit的内容合并到镜像磁盘中,这个合并过程就要用到secondary namenode。

fsimage:filesystem image 的简写,文件镜像。二进制文件,存储HDFS文件和目录元数据

Edits:二进制文件,每次保存fsimage之后到下次保存之间的所有HDFS操作,记录在Edit s文件。对文件的每一次操作,如打开、关闭、重命名文件和目录,都会生成一个edit记录。

fstime:二进制文件,fsimage做完一次checkpoint后,将最新的时间戳写入到fstime

Secondary NameNode:在HA cluster中又称为standby node

  • 它的作用是:定期合并 fsimage 和 edits 日志,将 edits 日志文件大小控制在一个限度下
hadoop集群 secondary namenode 的作用,fsiamge和edit的关系「建议收藏」
hadoop集群 secondary namenode 的作用,fsiamge和edit的关系「建议收藏」
  • namenode 响应 Secondary namenode 请求,将 edit log 推送给 Secondary namenode , 开始重新写一个新的 edit log
  • Secondary namenode 收到来自(HTTP方式) namenode 的 fsimage 文件和 edit log
  • Secondary namenode 将 fsimage 加载到内存,应用 edit log , 并生成一 个新的 fsimage 文件
  • Secondary namenode 将新的 fsimage 推送(HTTP方式)给 Namenode
  • Namenode 用新的 fsimage 取代旧的 fsimage , 在 fstime 文件中记下检查 点发生的时

SecondaryNameNode工作原理

namenode首先来说对于每个文件操作,Hadoop并不会都写到fsimage,这样是很慢的,但是每次操作在提交后运行前先写入edits编辑日志,当edits编辑日志文件大小超过64M(参数可以设定),或者时间超过1小时(参数可以设定),secondarynamenode就会做checkpoint的工作,向namenode发送请求,这时namenode产生临时空文件edits.new,secondarynamenode就会读取namenode中的edits和fsimage,然后进行合并,合并成fsimage.ckpt检查点,然后通过HTTP方式将fsimage.ckpt发送到NameNode,然后NameNode把fsimage.ckpt重命名为fsimage(覆盖原有fsimage文件),同时edits.new重命名为edits(覆盖原有edits文件)。

注意这里edits.new是个临时文件,只有NameNode或者SecondaryNameNode正在做checkpoint的时候存在。

namenode启动读取fsimage原理

当重新启动namenode的时候,NameNode启动时根据checkpoint时间加载最新的fsimage和edits文件到内存里,然后创建文件edits.new临时空文件,然后合并生成fsimage.ckpt检查点,edits.new重命名为edits(覆盖原有edits文件),fsimage.ckpt重命名为fsimage(覆盖原有fsimage文件),然后更新fstime时间 和VERSION版本

使用secondary nameonde的原因:

Fsimage是HDFS存储元数据的文件,它不会在HDFS的每次文件操作(如打开、查询、创建、修改文件)后进行更新。而HDFS的每一次文件操作会增加一条edits记录。这样会出现edits记录不断增加的情况。

这种设计不影响系统的恢复能力。因为如果Namenode失败了,元数据的最新状态可以通过从磁盘中读出fsimage文件加载到内存中来进行重新恢复,然后重新执行edits记录中的操作,这也正是NameNode重新启动时所做的事情。但是如果edits记录很多,NameNode启动时会花很长的时间来运行edits记录中的操作。在此期间,HDFS文件系统是不可用的。

为了解决这个问题,Hadoop在NameNode之外的节点上运行了一个Secondary NameNode进程。Secondary NameNode定期从NameNode拷贝fsimage和edits记录到临时目录并合并成一个新的Fsimage,随后它将新的fsimage上传到NameNode,这样NameNode便会更新fsimage并删除原来的编辑日志。这个过程叫checkpoint。

Secondary NameNode不足之处:

  • 因为Secondary namenode并不是实时进行checkpoint,所以当还没有进行下一次checkpoint的时候namenode出现了硬件故障同时又没有通过NFS存储元数据,那么Namenode中自上次checkpoint之后到故障发生期间的所有edits文件将丢失。因为此时secondary namenode存的只有上一次的fsimage文件,没有最新的edits文件,无法通过secondary namenode进行这段时间内的数据恢复。 Secondary NameNode不是NameNode的备份进程,如果NameNode宕机了,而SecondaryNameNode没有宕机,集群照样不能正常工作。如果要恢复集群工作,需要手动将Secondary NameNode上的fsimage文件拷贝到新的NameNode上面。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/106119.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年4月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档