SecondaryNameNode工作原理

fsimage和edits详解

  • edits

    edits存放的是HDFS最近一段时间的修改日志,客户端对HDFS的操作首先会被记录到edits,然后namenode的元数据也会更新。

  • fsimage

    fsimage是namenode元数据的备份,可以理解为是namenode的checkpoint。

因为NameNode的元数据是存储在内存中的,所以每次NameNode重启或者是启动的时候都会先导入fsimage然后按照edits执行一遍,得到目前的文件系统的元数据信息。注意:上述过程中HDFS会进入安全模式,安全模式下HDFS只允许读不允许修改,当读副本率大于99.99%,HDFS就认为已经把所有数据都装载完了,就会自动离开安全模式。

这两个文件的路径可以自己配置,在core-site.xml文件中,添加如下配置即可:

<property>
	<name>dfs.namenode.name.dir</name>
	<value>file:///export/servers/hadoop2.7.5/hadoopDatas/namenodeDatas,                  		file:///export/servers/hadoop2.7.5/hadoopDatas/namenodeDatas2</value> 
</property>
<property>
	<name>dfs.namenode.edits.dir</name>     					      			 <value>file:///export/servers/hadoop2.7.5/hadoopDatas/nn/edits</value>
</property>

SecondaryNamenode辅助管理元数据

在Hadoop2.X中引入了SecondaryNameNode,在生产环境中,这个节点一般不会和NameNode部署在同一个节点。SecondaryNamenode的引入,是为了给NameNode减轻负担,辅助NameNode管理元数据信息的。其工作原理如下图:

在这里插入图片描述

SecondaryNamenode工作原理详解:

fsimage要同步edits文件的会有一个触发点,到底什么时候SecondaryNamenode就要合并这两个文件了?这个可以自己配置,也有默认的参数。默认是距离上一次合并已经经过一个小时了,或者edits文件大小已经达到64MB了。这两个条件任何一个成立就会触发secondarynamenode合并元数据文件。如果需要设置其他参数的话,可以在core-site.xml文件里面进行如下配置:

<!-- 多久记录一次 HDFS 镜像, 默认 1小时 --> 
<property>  
    <name>fs.checkpoint.period</name>  
    <value>3600</value>
</property>
<!-- 一次记录多大, 默认 64M --> 
<property>  
    <name>fs.checkpoint.size</name>  
    <value>67108864</value> 
</property>

达到触发点之后,secondarynamenode就开始工作了:

1.先去namenode拉取edit和fsimage

2.secondarynamenode根据edits执行一遍得到最新的fsimage.ckpt并返回给namenode

3.namenode拿到fsimage.ckpt就会把它替换为fsimage,并将edits清空

4.通过上述步骤,NameNode就更新了edits和fsimage

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值