NameNode&Secondary NameNode 工作机制

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 

 

猜你喜欢

转载自www.cnblogs.com/deityjian/p/12306793.html