paulwong

配置secondarynamenode

NAME NODE起保存DATA NODE上文件的位置信息用,主要有两个保存文件:FsImage和EditLog,FsImage保存了上一次NAME NODE启动时的状态,EditLog则记录每次成功后的对HDFS的操作行为。当NAME NODE重启时,会合并FsImage和EditLog成为一个新的FsImage,清空EditLog,如果EditLog非常大的时候,则NAME NODE启动的时间会非常长。因此就有SECOND NAME NODE。


SECOND NAME NODE会以HTTP的方式向NAME NODE要这两个文件,当NAME NODE收到请求时,就会韦一个新的EditLog来记录,这时SECOND NAME NODE就会将取得的这两个文件合并,成一个新的FsImage,再发给NAME NODE,NAME NODE收到后,就会以这个为准,旧的就会归档不用。


SECOND NAME NODE还有一个用途就是当NAME NODE DOWN了的时候,可以改SECOND NAME NODE的IP为NAME NODE所用的IP,当NAME NODE用。

secondary namenoded 配置很容易被忽视,如果jps检查都正常,大家通常不会太关心,除非namenode发生问题的时候,才会想起还有个secondary namenode,它的配置共两步:

  1. 集群配置文件conf/master中添加secondarynamenode的机器
  2. 修改/添加 hdfs-site.xml中如下属性:

<property>
 <name>dfs.http.address</name>
 <value>{your_namenode_ip}:50070</value>
 <description>
 The address and the base port where the dfs namenode web ui will listen on.
 If the port is 0 then the server will start on a free port.
 </description>
 </property>


这两项配置OK后,启动集群。进入secondary namenode 机器,检查fs.checkpoint.dir(core-site.xml文件,默认为${hadoop.tmp.dir}/dfs/namesecondary)目录同步状态是否和namenode一致的。

如果不配置第二项则,secondary namenode同步文件夹永远为空,这时查看secondary namenode的log显示错误为:


2011-06-09 11:06:41,430 INFO org.apache.hadoop.hdfs.server.common.Storage: Recovering storage directory /tmp/hadoop-hadoop/dfs/namesecondary from failed checkpoint.
2011-06-09 11:06:41,433 ERROR org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode: Exception in doCheckpoint: 
2011-06-09 11:06:41,434 ERROR org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode: java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:211)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at sun.net.NetworkClient.doConnect(NetworkClient.java:163)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:394)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:529)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:233)
at sun.net.www.http.HttpClient.New(HttpClient.java:306)
at sun.net.www.http.HttpClient.New(HttpClient.java:323)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:970)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:911)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:836)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1172)
at org.apache.hadoop.hdfs.server.namenode.TransferFsImage.getFileClient(TransferFsImage.java:151)
at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.downloadCheckpointFiles(SecondaryNameNode.java:256)
at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.doCheckpoint(SecondaryNameNode.java:313)
at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.run(SecondaryNameNode.java:225)
at java.lang.Thread.run(Thread.java:662)


可能用到的core-site.xml文件相关属性

<property>
<name>fs.checkpoint.period</name>
<value>300</value>
<description>The number of seconds between two periodic checkpoints.
</description>
</property>

<property>
 <name>fs.checkpoint.dir</name>
 <value>${hadoop.tmp.dir}/dfs/namesecondary</value>
 <description>Determines where on the local filesystem the DFS secondary
 name node should store the temporary images to merge.
 If this is a comma-delimited list of directories then the image is
 replicated in all of the directories for redundancy.
 </description>
</property>

posted on 2013-01-31 17:39 paulwong 阅读(336) 评论(0)  编辑  收藏 所属分类: 分布式HADOOP云计算


只有注册用户登录后才能发表评论。


网站导航: