前言
在之前的章节中,我们有介绍到伪分布式的hdfs、yarn和mapreduce、历史服务与日志聚集的部署。接下来我们一起探讨下hadoop的SecondaryNameNode,内容可能较为粗糙,待博主以后水平提升后再来深入细化。
我们的hadoop环境如下
操作系统:CentOS6.4
Java版本:Oracle jdk1.7
Hadoop版本:Hadoop2.5.0
主机hostname:hadoop01.datacenter.com
hadoop目录:/opt/modules/hadoop-2.5.0
NameNode启动过程解析
1、在namenode格式化之后,hdfs会产生fsimage文件用来存储分布式文件系统的元数据。
2、我们对hdfs做的增删改操作记录,都会记录到edits日志文件中,我们来看一下我们现在的hadoop系统的namenode元数据信息。
[hadoop@hadoop01 ~]$ cd /opt/modules/hadoop-2.5.0/
[hadoop@hadoop01 hadoop-2.5.0]$ ll data/tmp/dfs/name/current/
total 6168
-rw-rw-r-- 1 hadoop hadoop 1048576 Apr 6 17:29 edits_0000000000000000001-0000000000000000011
-rw-rw-r-- 1 hadoop hadoop 1048576 Apr 7 22:17 edits_0000000000000000012-0000000000000000111
-rw-rw-r-- 1 hadoop hadoop 1048576 Apr 9 21:16 edits_0000000000000000112-0000000000000000112
-rw-rw-r-- 1 hadoop hadoop 1048576 Apr 11 22:27 edits_0000000000000000113-0000000000000000305
-rw-rw-r-- 1 hadoop hadoop 1048576 Apr 14 15:29 edits_0000000000000000306-0000000000000000306
-rw-rw-r-- 1 hadoop hadoop 1048576 Apr 14 15:33 edits_inprogress_0000000000000000307
-rw-rw-r-- 1 hadoop hadoop 2025 Apr 11 21:47 fsimage_0000000000000000112
-rw-rw-r-- 1 hadoop hadoop 62 Apr 11 21:47 fsimage_0000000000000000112.md5
-rw-rw-r-- 1 hadoop hadoop 3632 Apr 14 15:29 fsimage_0000000000000000305
-rw-rw-r-- 1 hadoop hadoop 62 Apr 14 15:29 fsimage_0000000000000000305.md5
-rw-rw-r-- 1 hadoop hadoop 4 Apr 14 15:33 seen_txid
-rw-rw-r-- 1 hadoop hadoop 206 Apr 14 15:29 VERSION
[hadoop@hadoop01 hadoop-2.5.0]$
3、namenode的启动过程中,会去加载最新的fsimage文件和edits文件到内存中。
4、由于edits日志文件记录了上一次namenode服务的所有增删改操作,所以该日志文件可能会非常大,严重影响本次namenode的启动效率。
5、那么可不可以在namenode的服务过程中,把当前的fsimage文件和edits文件合并为一个新的fsimage文件,再把新的日志记录写入一个新的edits文件中呢?这样的话,我们下次启动namenode的时候就可以非常迅速的完成启动过程。而我们的SecondaryNameNode就是完成这个功能的。
SecondaryNameNode部署
SecondaryNameNode的部署主要是配置hdfs-site.xml文件的dfs.namenode.secondary.http-address属性。
[hadoop@hadoop01 hadoop-2.5.0]$ vim etc/hadoop/hdfs-site.xml
...
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop01.datacenter.com:50090</value>
</property>
...
[hadoop@hadoop01 hadoop-2.5.0]$
启动SecondaryNameNode服务:
[hadoop@hadoop01 hadoop-2.5.0]$ sbin/hadoop-daemon.sh start secondarynamenode
starting secondarynamenode, logging to /opt/modules/hadoop-2.5.0/logs/hadoop-hadoop-secondarynamenode-hadoop01.datacenter.com.out
[hadoop@hadoop01 hadoop-2.5.0]$
通过我们刚刚配置的web服务网址http://hadoop01.datacenter.com:50090查看SecondaryNameNode服务情况:
总结
SecondaryNameNode作为Namenode的辅助程序,在NameNode服务其中,把当前的fsimage镜像文件和edits日志文件合并成新的日志文件,已加快下次namenode的启动效率。