NameNode和SecondaryNameNode的工作机制

NameNode&Secondary NameNode 工作机制

工作机制gif图

NameNode:
	1.启动时,加载编辑日志和镜像文件到内存
	2.当客户端对元数据进行增删改,请求NameNode
	3.NameNode记录操作日志,更新滚动日志
	4.日志记录完成,在NameNode内存中对元数据进行操作
	edits.001 操作日志
	edits.002
	edits.inprogress 正在进行的操作日志
	fsimage	镜像文件
SecondaryNameNode:(其主要作用就是:合并edit和fsimage)
	0.检查点(checkpoint)触发。条件是:
		a.定时时间到(默认一个小时)
		b.操作日志中的数据满了(100w次操作)
	1.请求NameNode是否需要CheckPoint,直接带回 NameNode是否检查结果
	2.执行CheckPoint请求
	3.滚动正在写的操作日志,生成最新的一个操作日志
	4.将操作日志和之前旧的镜像fsimage文件拷贝到SecondaryNameNode
	5.在SecondaryNameNode内存中合并日志文件和fsimage文件
	6.生成新的fsimage.chkpoint
	7.将fsimage.chkpoint拷贝到NameNode中
	8.重命名fsimage.chkpoint为fsimage

日志文件

目录结构:

$HADOOP_HOME/data/tmp/dfs/name/current
$HADOOP_DATA_HOME/tmp/dfs/name/current


edits_0000000000000000000
fsimage_0000000000000000000.md5
seen_txid
VERSION


1.fsimage:
	HDFS 文件系统元数据的一个永久性的检查点,其中包含 HDFS文件系统的所有目录和文件 idnode 的序列化信息
2.edits:
	存放 HDFS 文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先会被记录到 edits 文件中。
3.seen_txid:
	文件保存的是一个数字,就是最后一个 edits_的数字

	每次 Namenode 启动的时候都会将 fsimage 文件读入内存,
	并从 00001 开始到 seen_txid 中记录的数字依次执行每个 edits 里面的更新操作,
	保证内存中的元数据信息是最新的、同步的,可以看成 Namenode 启动的时候就将 fsimage 和 edits 文件进行了合并。

查看fsimage文件和edits文件

oiv 查看 fsimage 文件
	hdfs oiv -p 文件类型 -i 镜像文件 -o 转换后文件输出路径
	hdfs oiv -p XML -i fsimage_0000000000000000025 -o  /opt/module/hadoop-2.7.2/fsimage.xml

oev 查看 edits 文件
	hdfs oev -p 文件类型 -i 编辑日志 -o 转换后文件输出路径
	hdfs  oev  -p  XML  -i edits_0000000000000000012-0000000000000000013 -o /opt/module/hadoop-2.7.2/edits.xml

chkpoint 检查 时间 参数 设置

hdfs-default.xml

<!-- 默认:SecondaryNameNode 每隔一小时执行一次 -->
	<property>
		<name>dfs.namenode.checkpoint.period</name>
		<value>3600</value>
	</property>

<!-- 一分钟检查一次操作次数,当操作次数达到 1 百万时,SecondaryNameNode 执行一次。 -->	
	<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>

NameNode多目录配置

NameNode 的本地目录可以配置成多个,且每个目录存放内容相同,增加了可靠性。
配置步骤:

(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 中所有数据
	$ rm -rf data/ logs/
(3)格式化集群并启动。
	$ bin/hdfs namenode –format
	$ sbin/start-dfs.sh

本博客仅为博主学习总结,感谢各大网络平台的资料。蟹蟹!!

相关推荐
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:马嘣嘣 返回首页