原先使用hadoop默認設置(hadoop1.2.1),secondarynamenode會正常進行備份,定時從namenode拷貝image文件到SNN。但是具體SNN備份的時間周期和log文件的大小無法定制,后來樓主就修改了SNN的設置,將fs.checkpoint.period修改為3600s,fs.checkpoint.size修改為64兆。在core-site.xml配置文件中添加這兩個參數之后,卻發現SNN總是無法備份。后來google查找發現還是配置文件沒有配置完整造成的,修改配置文件core-site.xml 和hdfs-site.xml文件后問題解決。
貼一下這兩個文件內容:
core-site.xml:
1 <!-- ****************************************************************************************--> 2 <!-- This file only used in secondnamenode!!--> 3 <!-- ****************************************************************************************--> 4 5 <configuration> 6 7 <property> 8 <name>hadoop.tmp.dir</name> 9 <value>/bigdata/hadoop/tmp/</value> 10 <description>A base for other temporary directories.</description> 11 </property> 12 13 <property> 14 <name>fs.default.name</name> 15 <value>hdfs://namenode:54310</value> 16 </property> 17 18 <property> 19 <name>fs.checkpoint.period</name> 20 <value>3600</value> 21 <description>The number of seconds between two periodic checkpoints. </description> 22 </property> 23 24 <property> 25 <name>fs.checkpoint.size</name> 26 <value>67108864</value> 27 <description>The size of the current edit log (in bytes) that triggers a periodic checkpoint even if the fs.checkpoint.period hasn't 28 expired. </description> 29 </property> 30 31 32 <property> 33 <name>fs.checkpoint.dir</name> 34 <value>/bigdata/hadoop/namesecondary/</value> 35 </property> 36 </configuration>
hdfs-site.xml
1 <!-- ****************************************************************************************--> 2 <!-- This file only used in secondnamenode!!--> 3 <!-- ****************************************************************************************--> 4 5 <configuration> 6 7 8 <property> 9 <name>fs.checkpoint.period</name> 10 <value>3600</value> 11 <description>The number of seconds between two periodic checkpoints. </description> 12 </property> 13 14 15 <property> 16 <name>dfs.secondary.http.address</name> 17 <value>secondnamenode:50090</value> 18 </property> 19 20 21 <property> 22 <name>dfs.http.address</name> 23 <value>namenode:50070</value> 24 <final>true</final> 25 </property> 26 27 28 <property> 29 <name>dfs.replication</name> 30 <value>2</value> 31 </property> 32 33 <property> 34 <name>dfs.name.dir</name> 35 <value>/bigdata/hadoop/secondnamenodelogs/</value> 36 </property>
......
其中紅色部分為關鍵參數。樓主剛開始以為hdfs-site.xml不需要做修改,后來發現問題主要是出現在這個文件中,真是坑爹@!!!
在hdfs-site.xml文件中需要加上core-site.xml文件中的參數fs.checkpoint.period 或者fs.checkpoint.size;dfs.http.address指定namenode的訪問地址,SNN根據這個地址來獲取NN保存的image。dfs.secondary.http.address則是SNN自己Web接口,這個參數必須配置,樓主就是因為沒有配置這個參數一直報下面這個錯誤:
1 2014-06-25 14:17:40,408 ERROR org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode: Exception in doCheckpoint: 2 2014-06-25 14:17:40,408 ERROR org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode: java.io.FileNotFoundException: http://namenode:50070/ 3 getimage?putimage=1&port=50090&machine=0.0.0.0&token=-41:620270652:0:1403579817000:1403578915285&newChecksum=7fcdd4793ce44f017d290e7db78870e7 4 at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1434) 5 at org.apache.hadoop.hdfs.server.namenode.TransferFsImage.getFileClient(TransferFsImage.java:177) 6 at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.putFSImage(SecondaryNameNode.java:462) 7 at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.doCheckpoint(SecondaryNameNode.java:525) 8 at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.doWork(SecondaryNameNode.java:396) 9 at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.run(SecondaryNameNode.java:360) 10 at java.lang.Thread.run(Thread.java:662)