目录
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序号合并即可。下图中的例子是刚启动的,所以都是最新的