在Hadoop1.x.x的版本中,masters 文件里记录SecondaryNameNode的机器列表,每行一个 slaves 文件里记录启动datanode 和 tasktracker的机器列表,

hadoop2.2.0里采用了HA机制(active NameNode和standby NameNode),可以不用secondarynamenode了,当然也还可以用secondarynamenode。

Hadoop2.2.0里没有masters文件了,slaves文件还在,记录所有的DataNode。

这是hadoop2.2.0里SecondaryNameNode的默认配置:

<property>
<name>dfs.namenode.secondary.http-address</name>
<value>0.0.0.0:50090</value>
<description>
The secondary namenode http server address and port.
</description>
</property>

也就是说,默认情况下,hadoop 在NameNode所在机器里运行SecondaryNameNode,http监听端口是50090,在浏览器输入NameNode的地址和50090端口号,就可看到其信息。如下

SecondaryNameNode
Version: 2.2.0, 1529768 Compiled: 2013-10-07T06:28Z by hortonmu from branch-2.2.0

--------------------------------------------------------------------------------

SecondaryNameNode Status
Name Node Address : hadoop1.highgo.com/192.168.100.90:9000
Start Time : Tue May 27 14:48:24 CST 2014
Last Checkpoint Time : Tue May 27 15:49:28 CST 2014
Checkpoint Period : 3600 seconds
Checkpoint Size : 976.56 KB (= 1000000 bytes)
Checkpoint Dirs : [file:///home/hadoop/develop/hadoop/tmp/dfs/namesecondary]
Checkpoint Edits Dirs: [file:///home/hadoop/develop/hadoop/tmp/dfs/namesecondary]

but,这样不安全,要分到两台服务器上。

所以NameNode和SecondaryNameNode的配置是分开的。

NameNode由core-site.xml fs.default.name指定,例子如下

<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>

而SecondaryNameNode在hdfs-site.xml 中配置:

<property>  
<name>dfs.http.address</name>
<value>${namenode}:50070</value>
<description>Secondary get fsimage and edits via dfs.http.address</description>
</property>
<property>
<name>dfs.secondary.http.address</name>
<value>${secondarynamenode}:50090</value>
<description>NameNode get the newest fsimage via dfs.secondary.http.address</description>
</property>

注意:

  1. 实际上dfs.http.address只在secondary机器上的hdfs-site.xml文件中设置,dfs.secondary.http.address只在namenode上设置即可,为了便于管理,集群所有机器同样配置
  2. 采用默认端口(namenode:50070,secondary:50090)时可以省略该配置