配置SecondaryNameNode


一、SecondaryNameNode概念:

    光從字面上來理解,很容易讓一些初學者先入為主:SecondaryNameNode(snn)就是NameNode(nn)的熱備進程。其實不是。ssn是HDFS架構中的一個組成部分,但是經常由於名字而被人誤解它真正的用途,其實它真正的用途,是用來保存namenode中對HDFS metadata的信息的備份,並減少namenode重啟的時間。對於hadoop進程中,要配置好並正確的使用snn,還是需要做一些工作的。hadoop的默認配置中讓snn進程默認運行在了namenode的那台機器上,但是這樣的話,如果這台機器出錯,宕機,對恢復HDFS文件系統是很大的災難,更好的方式是:將snn的進程配置在另外一台機器上運行。

    在hadoop中,namenode負責對HDFS的metadata的持久化存儲,並且處理來自客戶端的對HDFS的各種操作的交互反饋。為了保證交互速度,HDFS文件系統的metadata是被load到namenode機器的內存中的,並且會將內存中的這些數據保存到磁盤進行持久化存儲。為了保證這個持久化過程不會成為HDFS操作的瓶頸,hadoop采取的方式是:沒有對任何一次的當前文件系統的snapshot進行持久化,對HDFS最近一段時間的操作list會被保存到namenode中的一個叫Editlog的文件中去。當重啟namenode時,除了load fslmage意外,還會對這個Editlog文件中記錄的HDFS操作進行replay,以恢復HDFS重啟之前的最終狀態。

    而SecondaryNameNode,會周期性的將Editlog中記錄的對HDFS的操作合並到一個checkpoint中,然后清空Editlog。所以namenode的重啟就會Load最新的一個checkpoint,並replay Editlog中記錄的hdfs操作,由於Editlog中記錄的是從上一次checkpoint以后到現在的操作列表,所以就會比較小。如果沒有snn的這個周期性的合並過程,那么當每次重啟namenode的時候,就會花費很長的時間。而這樣周期性的合並就能減少重啟的時間。同時也能保證HDFS系統的完整性。這就是SecondaryNameNode所做的事情。所以snn並不能分擔namenode上對HDFS交互性操作的壓力。盡管如此,當namenode機器宕機或者namenode進程出問題時,namenode的daemon進程可以通過人工的方式從snn上拷貝一份metadata來恢復HDFS文件系統。

    至於為什么要將snn進程運行在一台非NameNode的機器上,這主要出於兩點考慮:

1、可擴展性:創建一個新的HDFS的snapshot需要將namenode中load到內存的metadata信息全部拷貝一遍,這樣的操作需要的內存和namenode占用的內存一樣,由於分配給namenode進程的內存其實是對HDFS文件系統的限制,如果分布式文件系統非常的大,那么namenode那台機器的內存就可能會被namenode進程全部占據。

2、容錯性:當snn創建一個checkpoint的時候,它會將checkpoint拷貝成metadata的幾個拷貝。將這個操作運行到另外一台機器,還可以提供分布式文件系統的容錯性。

SECONDARYNAMENODE工作原理

    日志與鏡像的定期合並總共分五步:

    1、SecondaryNameNode通知NameNode准備提交edits文件,此時主節點產生edits.new
    2、SecondaryNameNode通過http get方式獲取NameNode的fsimage與edits文件(在SecondaryNameNode的current同級目錄下可見到 temp.check-point或者previous-checkpoint目錄,這些目錄中存儲着從namenode拷貝來的鏡像文件)
    3、SecondaryNameNode開始合並獲取的上述兩個文件,產生一個新的fsimage文件fsimage.ckpt
    4、SecondaryNameNode用http post方式發送fsimage.ckpt至NameNode
    5、NameNode將fsimage.ckpt與edits.new文件分別重命名為fsimage與edits,然后更新fstime,整個checkpoint過程到此結束。 在新版本的hadoop中(hadoop0.21.0),SecondaryNameNode兩個作用被兩個節點替換, checkpoint node與backup node.         SecondaryNameNode備份由三個參數控制fs.checkpoint.period控制周期,fs.checkpoint.size控制日志文件超過多少大小時合並, dfs.http.address表示http地址,這個參數在SecondaryNameNode為單獨節點時需要設置。

二、配置將SeconddaryNameNode運行在另外一台機器上

    HDFS的一次運行實例是通過在namenode機器上的$HADOOP_HOME/bin/start-dfs.sh(或者start-all.sh)腳本來啟動的。這個腳本會在運行該腳本的機器上啟動namenode進程,而slaves機器上都會啟動DataNode進程,slave機器的列表保存在conf/slaves文件中,一行一台機器。並且會在另外一台機器上啟動一個snn進程,這台機器由conf/masters文件指定。所以,這里需要嚴格注意,conf/masters文件中指定的機器,並不是說jobtracker或者namenode進程要運行在這台機器上,因為這些進程是運行在launch bin/start-dfs.sh或者bin/start-mapred.sh(start-all.sh)的機器上的。所以,master這個文件名是非常的令人混淆的,應該叫做secondaries會比較合適。然后通過以下步驟:

1、將所有想要運行secondarynamenode進程的機器寫到masters文件中,一行一台。

2、修改在masters文件中配置了的機器上的conf/hdfs-site.xml文件,加上如下內容:

1   <property>
2   <name>dfs.secondary.http.address</name>
3   <value>192.168.1.152:50090</value>
##如果secondarynamenode為多個話可以設置為0.0.0.0:50090
4 </property> 5 <property> 6 <name>dfs.http.address</name> 7 <value>192.168.1.151:50070</value> 8 </property>

core-site.xml:這里有2個參數可配置,但一般來說我們不做修改。fs.checkpoint.period表示多長時間記錄一次hdfs的鏡像。默認是1小時。fs.checkpoint.size表示一次記錄多大的size,默認64M。

 1 <property>
 2     <name>fs.checkpoint.period</name>
 3     <value>3600</value>
 4     <description>The number of seconds between two periodic checkpoints.</description>
 5   </property>
 6   <property>
 7     <name>fs.checkpoint.size</name>
 8     <value>67108864</value>
 9     <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>
10   </property>
11   <property>
12     <name>fs.checkpoint.dir</name>
13     <value>/app/user/hdfs/namesecondary</value>
14     <description>Determines where on the local filesystem the DFS secondary namenode 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>
15   </property>

3、配置檢查。配置完成之后,我們需要檢查一次是否成功。我們可以通過查看運行secondarynamenode的機器上文件目錄來確定是否成功配置。
三、恢復

    1、配置完成后,如何恢復。首先我們kill掉namenode進程,然后將hadoop.tmp.dir目錄下的數據刪除掉。制造master掛掉情況。

    2、在配置參數dfs.name.dir指定的位置建立一個空文件夾;把檢查點目錄的位置賦值給配置參數fs.checkpoint.dir;啟動namenode,並加上-importCheckpoint。

    3、啟動namenode的時候采用hadoop namenode -importCheckpoint.

四、Secondarynamenode的啟動和停止

啟動:

   bin/hadoop-daemons.sh --config conf/ --hosts masters start secondarynamenode

停止:

   bin/hadoop-daemons.sh --config conf/ --hosts masters stop secondarynamenode

五、總結

    1、secondarynamenode可以配置多個,master文件里面多寫幾個就可以。

    2、千萬記得如果要恢復數據是需要手動拷貝到namenode機器上的,不是自動的。

    3、鏡像備份的周期時間是可以修改的,如果不想一小時備份一次,可以改時間短點。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM