单节点配置SecondaryNameNode
一、SecondaryNameNode概念:
??? 光從字面上來理解,很容易讓一些初學(xué)者先入為主:SecondaryNameNode(snn)就是NameNode(nn)的熱備進程。其實不是。ssn是HDFS架構(gòu)中的一個組成部分,但是經(jīng)常由于名字而被人誤解它真正的用途,其實它真正的用途,是用來保存namenode中對HDFS metadata的信息的備份,并減少namenode重啟的時間。對于hadoop進程中,要配置好并正確的使用snn,還是需要做一些工作的。hadoop的默認(rèn)配置中讓snn進程默認(rèn)運行在了namenode的那臺機器上,但是這樣的話,如果這臺機器出錯,宕機,對恢復(fù)HDFS文件系統(tǒng)是很大的災(zāi)難,更好的方式是:將snn的進程配置在另外一臺機器上運行。
??? 在hadoop中,namenode負責(zé)對HDFS的metadata的持久化存儲,并且處理來自客戶端的對HDFS的各種操作的交互反饋。為了保證交互速度,HDFS文件系統(tǒng)的metadata是被load到namenode機器的內(nèi)存中的,并且會將內(nèi)存中的這些數(shù)據(jù)保存到磁盤進行持久化存儲。為了保證這個持久化過程不會成為HDFS操作的瓶頸,hadoop采取的方式是:沒有對任何一次的當(dāng)前文件系統(tǒng)的snapshot進行持久化,對HDFS最近一段時間的操作list會被保存到namenode中的一個叫Editlog的文件中去。當(dāng)重啟namenode時,除了load fslmage意外,還會對這個Editlog文件中記錄的HDFS操作進行replay,以恢復(fù)HDFS重啟之前的最終狀態(tài)。
??? 而SecondaryNameNode,會周期性的將Editlog中記錄的對HDFS的操作合并到一個checkpoint中,然后清空Editlog。所以namenode的重啟就會Load最新的一個checkpoint,并replay Editlog中記錄的hdfs操作,由于Editlog中記錄的是從上一次checkpoint以后到現(xiàn)在的操作列表,所以就會比較小。如果沒有snn的這個周期性的合并過程,那么當(dāng)每次重啟namenode的時候,就會花費很長的時間。而這樣周期性的合并就能減少重啟的時間。同時也能保證HDFS系統(tǒng)的完整性。這就是SecondaryNameNode所做的事情。所以snn并不能分擔(dān)namenode上對HDFS交互性操作的壓力。盡管如此,當(dāng)namenode機器宕機或者namenode進程出問題時,namenode的daemon進程可以通過人工的方式從snn上拷貝一份metadata來恢復(fù)HDFS文件系統(tǒng)。
??? 至于為什么要將snn進程運行在一臺非NameNode的機器上,這主要出于兩點考慮:
1、可擴展性:創(chuàng)建一個新的HDFS的snapshot需要將namenode中l(wèi)oad到內(nèi)存的metadata信息全部拷貝一遍,這樣的操作需要的內(nèi)存和namenode占用的內(nèi)存一樣,由于分配給namenode進程的內(nèi)存其實是對HDFS文件系統(tǒng)的限制,如果分布式文件系統(tǒng)非常的大,那么namenode那臺機器的內(nèi)存就可能會被namenode進程全部占據(jù)。
2、容錯性:當(dāng)snn創(chuàng)建一個checkpoint的時候,它會將checkpoint拷貝成metadata的幾個拷貝。將這個操作運行到另外一臺機器,還可以提供分布式文件系統(tǒng)的容錯性。
SECONDARYNAMENODE工作原理
????日志與鏡像的定期合并總共分五步:
??? 1、SecondaryNameNode通知NameNode準(zhǔn)備提交edits文件,此時主節(jié)點產(chǎn)生edits.new
??? 2、SecondaryNameNode通過http get方式獲取NameNode的fsimage與edits文件(在SecondaryNameNode的current同級目錄下可見到 temp.check-point或者previous-checkpoint目錄,這些目錄中存儲著從namenode拷貝來的鏡像文件)
??? 3、SecondaryNameNode開始合并獲取的上述兩個文件,產(chǎn)生一個新的fsimage文件fsimage.ckpt
??? 4、SecondaryNameNode用http post方式發(fā)送fsimage.ckpt至NameNode
??? 5、NameNode將fsimage.ckpt與edits.new文件分別重命名為fsimage與edits,然后更新fstime,整個checkpoint過程到此結(jié)束。 在新版本的hadoop中(hadoop0.21.0),SecondaryNameNode兩個作用被兩個節(jié)點替換, checkpoint node與backup node.???????? SecondaryNameNode備份由三個參數(shù)控制fs.checkpoint.period控制周期,fs.checkpoint.size控制日志文件超過多少大小時合并, dfs.http.address表示http地址,這個參數(shù)在SecondaryNameNode為單獨節(jié)點時需要設(shè)置。
二、配置將SeconddaryNameNode運行在另外一臺機器上
??? HDFS的一次運行實例是通過在namenode機器上的$HADOOP_HOME/bin/start-dfs.sh(或者start-all.sh)腳本來啟動的。這個腳本會在運行該腳本的機器上啟動namenode進程,而slaves機器上都會啟動DataNode進程,slave機器的列表保存在conf/slaves文件中,一行一臺機器。并且會在另外一臺機器上啟動一個snn進程,這臺機器由conf/masters文件指定。所以,這里需要嚴(yán)格注意,conf/masters文件中指定的機器,并不是說jobtracker或者namenode進程要運行在這臺機器上,因為這些進程是運行在launch bin/start-dfs.sh或者bin/start-mapred.sh(start-all.sh)的機器上的。所以,master這個文件名是非常的令人混淆的,應(yīng)該叫做secondaries會比較合適。然后通過以下步驟:
1、將所有想要運行secondarynamenode進程的機器寫到masters文件中,一行一臺。
2、修改在masters文件中配置了的機器上的conf/hdfs-site.xml文件,加上如下內(nèi)容:
1 <property> 2 <name>dfs.secondary.http.address</name> 3 <value>192.168.1.152:50090</value>##如果secondarynamenode為多個話可以設(shè)置為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個參數(shù)可配置,但一般來說我們不做修改。fs.checkpoint.period表示多長時間記錄一次hdfs的鏡像。默認(rèn)是1小時。fs.checkpoint.size表示一次記錄多大的size,默認(rèn)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的機器上文件目錄來確定是否成功配置。
三、恢復(fù)
??? 1、配置完成后,如何恢復(fù)。首先我們kill掉namenode進程,然后將hadoop.tmp.dir目錄下的數(shù)據(jù)刪除掉。制造master掛掉情況。
??? 2、在配置參數(shù)dfs.name.dir指定的位置建立一個空文件夾;把檢查點目錄的位置賦值給配置參數(shù)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
五、總結(jié)
??? 1、secondarynamenode可以配置多個,master文件里面多寫幾個就可以。
??? 2、千萬記得如果要恢復(fù)數(shù)據(jù)是需要手動拷貝到namenode機器上的,不是自動的。
??? 3、鏡像備份的周期時間是可以修改的,如果不想一小時備份一次,可以改時間短點。
轉(zhuǎn)自:http://www.cnblogs.com/Richardzhu/p/3435568.html
總結(jié)
以上是生活随笔為你收集整理的单节点配置SecondaryNameNode的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 整合Struts2、Spring、Hib
- 下一篇: 公积金装修贷款申请需要条件 公积金装修贷