NameNode和SecondaryNameNode的工作机制

目录

1 概述

2 原理图

2.1 checkpoint的时间设置

 2.2 NameNode故障管理

2.3 集群安全模式

2.4 NameNode  多目录配置

3 问题


1 概述

HDFS集群有两类节点以管理节点-工作节点模式运行,即一个namenode(管理节点)和多个datanode(工作节点)。

namenode管理文件系统的命名空间。它维护着文件系统树及整棵树内所有的文件和目录。这些信息以两个文件形式永久

保存在本地磁盘上:命名空间镜像文件(fsimage)和编辑日志文件(edits)

fsimage:nameNode中存的元数据信息进行序列化以后形成的文件(fsimage0000000001)

edits:对nameNode中元数据更新是每一步操作

SecondaryNameNode主要作用是合并nameNode磁盘中edits和fsimage文件形成最新的fsimage

2 原理图

2.1 checkpoint的时间设置

1.通常情况下,snn每隔一个小时执行一次

[hdfs-default.xml]

<property>
    <name>dfs.namenode.checkpoint.period</name>
    <value>3600</value>
</property>

2.一分钟检查一次操作次数,当操作次数达到1百万时,snn执行一次

<property>
    <name>dfs.namenode.checkpoint.txns</name>
    <value>1000000</value>
    <description>操作动作次数</description>
</property>
<property>
    <name>dfs.namenode.checkpoint.check.period</name>
    <value>60</value>
    <description>1分钟检查一次操作次数</description>
</property>

注意:修改配置后,需要重新启动集群 

 2.2 NameNode故障管理

namenode故障后,可以采取如下两种方法恢复数据:

1.将snn中数据拷贝到nn存储数据的目录

1)kill -9 namenode进程

2)删除NameNode存储的数据(/opt/module/hadoop-2.7.4/data/dfs/name/*)

3)拷贝snn中数据(/opt/module/hadoop-2.7.4/data/dfs/namesecondary/current)到原NameNode存储数据目录(/opt/module/hadoop-2.7.4/data/dfs/name/current)

4)重新启动namenode

2.3 集群安全模式

       NameNode启动时,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作。一旦内存中成功建立文件系统元数据的映像,则创建一个新的fsimage文件和一个空的编辑日志。此时,NameNode开始监听DataNode请求,但是此刻,NameNode运行在安全模式,即NameNode的文件系统对于客户端来说是只读的。

       系统中的数据块的位置并不是有NameNode维护的,而是以块列表的形式存储在DataNode中。

[caimh@master-node dfs]$ hdfs dfsadmin -safemode get          --查看安全模式状态
Safe mode is OFF
[caimh@master-node dfs]$ hdfs dfsadmin -safemode enter        --进入安全模式状态
Safe mode is ON
[caimh@master-node dfs]$ hdfs dfsadmin -safemode leave        --退出安全模式状态
Safe mode is OFF
[caimh@master-node dfs]$ hdfs dfsadmin -safemode wait         --等待安全模式状态
Safe mode is OFF

2.4 NameNode  多目录配置

1.NameNode的本地目录可以配置多个,且每个目录存放内容相同,增加了可靠性

2.具体配置

1)在hdfs-site.xml文件增加如下内容

<property>
    <name>dfs.namenode.name.dir</name>
    <value>file:///${hadoop.tmp.dir}/dfs/name1,file:///${hadoop.tmp.dir}/dfs/name2</value>
</property>

2)停止集群,删除data和logs中所有数据

[caimh@master-node hadoop-2.7.4]$ rm -rf data/ logs/        --master-node
[caimh@slave-node1 hadoop-2.7.4]$ rm -rf data/ logs/        --slave-node1
[caimh@slave-node2 hadoop-2.7.4]$ rm -rf data/ logs/        --slave-node2

3)格式化集群并启动

[caimh@master-node hadoop-2.7.4]$ hadoop namenode -format
[caimh@master-node hadoop-2.7.4]$ start-dfs.sh
[caimh@master-node hadoop-2.7.4]$ start-yarn.sh

4)查看结果

3 问题

namenode如何确定下次开机启动的时候合并哪些edits?

通过最新合并的fsimage_的序号(例如fsimage_0000000000000000584)和seen_txid存放的序号(如585)取它们中间的edits序号合并即可。下图中的例子是刚启动的,所以都是最新的

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值