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

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

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

首先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的关系「建议收藏」
  • 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上面。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • day2 购物商城

    day2 购物商城

  • idea导入springboot源码

    idea导入springboot源码两天啊,导入了两天没有成功啊,网上搜了超级多的教程,没有用啊。而后我让领导帮我试试,领导从github直接下载源码包,然后通过idea的open导入,然后idea就自动下载jar包,然后,然后就好了!!!我人傻了。下载的是2.2.X,因为我本地用的是maven,所以在2.2.9.release版本之后用的都是gradle构建项目的。后来发现,是我自作聪明了。原来,maven默认配置文件在C盘,我当时装的时候移到D盘,然后导入源码的时候怎么都识别不了,目前具体原因还没有找到,但是我把maven的配置

  • Glance详解_glance of

    Glance详解_glance ofGlance简介Glance是OpenStack平台中负责镜像服务的组件,其功能包括系统镜像的查找、注册和获取等,简单来说glance的功能就是用户可以通过其提供的RESTAPI查询和获取镜像元数据。glance负责OpenStack中的ImageService,那么Image是什么,简单来说Image就是一个模板,里面包含各种常用的操作系统和软件,这样用户在租用OpenStack服务后就…

    2022年10月25日
  • 混合开发hybrid原理_unity引擎开源吗

    混合开发hybrid原理_unity引擎开源吗首先,我们先来罗列一下当前市面上,移动端的各种开发方法1.NativeApp纯原生的app开发模式,android(Java)或者ios(Swift,Oc)优点:有最好的性能,有最好的体验缺点:开发和发布的成本极高,两端需要不同的技术人员来维护,原生开发人员非常的稀缺2.WebApp移动端运行在浏览器上的网站,我们一般称之为H5应用,就是泛指我们经常开发的spa,map页面语言:js,vue,react,angular等优点:1.开发和发布非常方便2.用户看到的页面,会随着开发人

  • 制作initramfs镜像_乌班图initramfs问题

    制作initramfs镜像_乌班图initramfs问题Initramfs的制作和移植1.initramfsinitramfs在编译内核的同时被编译并与内核生成一个映像文件,可以压缩也可以不压缩,但是目前只支持cpio包格式。它是根文件系统制作和制作的一种非常简单的方法,也可以通过执行这个文件系统中的程序引导真正的文件系统,这样加载根文件系统的工作就不是内核的工作,而是initramfs的工作。由于initramfs使用cpio包格

  • C#设计模式系列:命令模式(Command)

    C#设计模式系列:命令模式(Command)

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号