標籤:des style http color strong 檔案
一、SecondaryNameNode用途
SNN是用來儲存namenode中對HDFS metadata的資訊的備份,並減少namenode重啟的時間,SNN進程預設運行在 namenode 機器上,如果這台機器出錯,宕機,對恢複HDFS檔案系統是很大的災難,因此最佳方式是將SNN進程配置在另外一台機器上運行。
在hadoop中,namenode負責對HDFS的metadata的持久化儲存,並且處理來自用戶端的對HDFS的各種操作的互動反饋。為了保證互動速度,HDFS檔案系統的metadata是被load到namenode機器的記憶體中的,並且會將記憶體中的這些資料儲存到磁碟進行持久化儲存。為了保證這個持久化過程不會成為HDFS操作的瓶頸。
hadoop採取的策略是:把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工作原理:
1、SecondaryNameNode通知NameNode準備提交edits檔案,此時namenode節點產生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中,SecondaryNameNode兩個作用被兩個節點替換,checkpoint node與backup node.
SecondaryNameNode備份由三個參數控制fs.checkpoint.period控制周期,fs.checkpoint.size控制記錄檔超過多少大小時合并, dfs.http.address表示http地址,這個參數在SecondaryNameNode為單獨節點時需要設定。
二、配置SNN
HDFS的一次運行執行個體是通過在namenode機器上的$HADOOP_HOME/bin/start-dfs.sh(或者start-all.sh) 指令碼來啟動的。並在運行該指令碼的機器上啟動namenode進程,而slaves機器都會啟動DataNode進程,slave機器的列表儲存 在conf/slaves檔案中,一行一台機器。並且會在另外一台機器上啟動一個snn進程,這台機器由conf/masters檔案指定。
所以,conf/masters檔案中指定的機器是SNN進程啟動並執行機器,而不是jobtracker或者namenode進程要運行機器,因為這些進程是運行在launch bin/start-dfs.sh或者bin/start-mapred.sh(start-all.sh)的機器上的。
通過以下步驟配置SNN運行在另一台或多台機器上:
1、將所有想要運行secondarynamenode進程的機器寫到masters檔案中,一行一台。
2、修改在masters檔案中配置了的機器上的conf/hdfs-site.xml檔案,加上如下內容:
<property>
<name>dfs.secondary.http.address</name>
<value>192.168.1.152:50090</value>##如果secondarynamenode為多個話可以設定為0.0.0.0:50090
</property>
<property>
<name>dfs.http.address</name>
<value>192.168.1.151:50070</value>
</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>
<property>
<name>fs.checkpoint.dir</name>
<value>/app/user/hdfs/namesecondary</value>
<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>
</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可以配置多個,修改conf/masters檔案。
2、如果要恢複資料是需要手動拷貝到namenode機器上的。