一、環境
Hadoop 0.19.2、JDK 1.6、Linux操作系統
二、背景
上週五的時候,由於操作系統的原因,導致JDK出現莫名的段錯誤。無論是重啓機器還是JDK重裝都無濟於事。更可悲的是,出問題的機器就是Master。當時心裏就涼了半截,因爲secondarynamenode配置也是在這個機器上(默認的,沒改過)。不過萬幸的是這個集羣是測試環境,所以問題不大。借這個緣由,我將secondarynamenode重新配置到其他機器上,並做namenode掛掉並恢復的測試。
三、操作
1、關於secondarynamenode網上有寫不錯的文章做說明,這裏我只是想說關鍵一點,它不是namenode的備份進程,說白了,namenode掛了,如果secondarynamenode沒掛,很不幸,集羣一樣無法正常工作。這裏有個文檔翻譯的很好,我鏈接一下:http://blog.csdn.net/AE86_FC/archive/2010/02/03/5284181.aspx
2、secondarynamenode一般來說不應該和namenode在一起,所以,我把它配置到了datanode上。配置到datanode上,一般來說需要改以下配置文件。conf/master、conf/hdfs-site.xml和conf/core-site.xml這3個配置文件,修改部分如下:
master:一般的安裝手冊都是說寫上namenode機器的IP或是名稱。這裏要說明一下,這個master不決定哪個是namenode,而決定的是secondarynamenode(決定誰是namenode的關鍵配置是core-site.xml中的fs.default.name這個參數)。所以,這裏直接寫上你的datanode的IP或機器名稱就可以了。一行一個。
hdfs-site.xml:這個配置文件要改1個參數:
0.0.0.0改爲你的namenode的IP地址。
<property>
<name>dfs.http.address</name>
<value>0.0.0.0: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>
core-site.xml:這裏有2個參數可配置,但一般來說我們不做修改。fs.checkpoint.period表示多長時間記錄一次hdfs的鏡像。默認是1小時。fs.checkpoint.size表示一次記錄多大的size,默認64M。
<property>
<name>fs.checkpoint.period</name>
<value>3600</value>
<description>The number of seconds between two periodic checkpoints.
</description>
</property>
<property>
<name>fs.checkpoint.size</name>
<value>67108864</value>
<description>The size of the current edit log (in bytes) that triggers
a periodic checkpoint even if the fs.checkpoint.period hasn't expired.
</description>
</property>
3、配置檢查。配置完成之後,我們需要檢查一下是否成功。我們可以通過查看運行secondarynamenode的機器上文件目錄來確定是否成功配置。首先輸入jps查看是否存在secondarynamenode進程。如果存在,在查看對應的目錄下是否有備份記錄。如下圖:
該目錄一般存在於hadoop.tmp.dir/dfs/namesecondary/下面。
四、恢復
1、配置完成了,如何恢復。首先我們kill掉namenode進程,然後將hadoop.tmp.dir目錄下的數據刪除掉。製造master掛掉情況。
2、將secondarynamenode節點上hadoop.tmp.dir/dfs/namesecondary目錄整體拷貝到namenode節點上的hadoop目錄下,例如hadoop安裝在/home/hadoop目錄,則拷貝後爲/home/hadoop/namesecondary/
3、刪除dfs.name.dir目錄下的所有內容
4、修改hadoop-site.xml配置文件,將拷貝後的namesecondary目錄複製給配置參數fs.checkpoint.dir
5、啓動namenode的時候採用hadoop namenode –importCheckpoint
/home/hadoop/bin/hadoop namenode -importCheckpoint
此時系統會從/home/hadoop/namesecondary目錄下加載edites
(黑體字部分是在轉貼原文的基礎上,根據實際經驗作了修改的部分 20110630 needle2)
五、總結
1、secondarynamenode可以配置多個,master文件裏面多寫幾個就可以。
2、千萬記得如果要恢復數據是需要手動拷貝到namenode機器上的。不是自動的(參看上面寫的恢復操作)。
3、鏡像備份的週期時間是可以修改的,如果不想一個小時備份一次,可以改的時間短點。core-site.xml中的fs.checkpoint.period值。