這篇文章主要介紹Secondary NameNode的功能是什么,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
專注于為中小企業(yè)提供成都網(wǎng)站制作、做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)金寨免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了千余家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
最近有朋友問(wèn)我Secondary NameNode的作用,是不是NameNode的備份?是不是為了防止NameNode的單點(diǎn)問(wèn)題?確實(shí),剛接觸Hadoop,從字面上看,很容易會(huì)把Secondary NameNode當(dāng)作備份節(jié)點(diǎn);其實(shí),這是一個(gè)誤區(qū),我們不能從字面來(lái)理解,閱讀官方文檔,我們可以知道,其實(shí)并不是這么回事,下面就來(lái)贅述下Secondary NameNode的作用。
在Hadoop中,有一些命名模塊不那么盡人意,Secondary NameNode就是一個(gè)典型的例子之一。從它的名字上看,它給人的感覺就像是NameNode的備份節(jié)點(diǎn),但實(shí)際上卻不是。很多Hadoop的入門者都很疑惑,Secondary NameNode究竟在其中起什么作用,它在HDFS中所扮演的角色是什么。下面,我就來(lái)解釋下:
從名字來(lái)看,它確實(shí)與NameNode有點(diǎn)關(guān)系;因此,在深入了解Secondary NameNode之前,我們先來(lái)看看NameNode是做什么的。
上圖展示來(lái)NameNode怎么把元數(shù)據(jù)保存到磁盤上,這里有兩個(gè)不同的文件:
fsimage:
它是NameNode啟動(dòng)時(shí)對(duì)整個(gè)文件系統(tǒng)的快照。
edits:
它是在NameNode啟動(dòng)后,對(duì)文件系統(tǒng)的改動(dòng)序列。
只有在NameNode重啟時(shí),edits才會(huì)合并到fsimage文件中,從而得到一個(gè)文件系統(tǒng)的最新快照。但是在生產(chǎn)環(huán)境集群中的NameNode是很少重啟的,這意味者當(dāng)NameNode運(yùn)行來(lái)很長(zhǎng)時(shí)間后,edits文件會(huì)變的很大。在這種情況下就會(huì)出現(xiàn)下面這些問(wèn)題:
edits文件會(huì)變的很大,如何去管理這個(gè)文件?
NameNode的重啟會(huì)花費(fèi)很長(zhǎng)的時(shí)間,因?yàn)橛泻芏喔膭?dòng)要合并到fsimage文件上。
如果NameNode宕掉了,那我們就丟失了很多改動(dòng),因?yàn)榇藭r(shí)的fsimage文件時(shí)間戳比較舊。
因此為了克服這個(gè)問(wèn)題,我們需要一個(gè)易于管理的機(jī)制來(lái)幫助我們減小edits文件的大小和得到一個(gè)最新的fsimage文件,這樣也會(huì)減小在NameNode上的壓力。而Secondary NameNode就是為了幫助解決上述問(wèn)題提出的,它的職責(zé)是合并NameNode的edits到fsimage文件中。如圖所示:
上圖的工作原理,我這里也贅述下:
首先,它定時(shí)到NameNode去獲取edits,并更新到fsimage上。
一旦它有新的fsimage文件,它將其拷貝回NameNode上。
NameNode在下次重啟時(shí)回使用這個(gè)新的fsimage文件,從而減少重啟的時(shí)間。
Secondary NameNode的整個(gè)目的在HDFS中提供一個(gè)Checkpoint Node,通過(guò)閱讀官方文檔可以清晰的知道,它只是NameNode的一個(gè)助手節(jié)點(diǎn),這也是它在社區(qū)內(nèi)被認(rèn)為是Checkpoint Node的原因。
現(xiàn)在,我們明白Secondary NameNode所做的是在文件系統(tǒng)這設(shè)置一個(gè)Checkpoint來(lái)幫助NameNode更好的工作;它不是取代NameNode,也不是NameNode的備份。
Secondary NameNode的檢查點(diǎn)進(jìn)程啟動(dòng),是由兩個(gè)配置參數(shù)控制的:
fs.checkpoint.period,指定連續(xù)兩次檢查點(diǎn)的最大時(shí)間間隔, 默認(rèn)值是1小時(shí)。
fs.checkpoint.size定義了edits日志文件的最大值,一旦超過(guò)這個(gè)值會(huì)導(dǎo)致強(qiáng)制執(zhí)行檢查點(diǎn)(即使沒到檢查點(diǎn)的最大時(shí)間間隔)。
默認(rèn)值是64MB。
如果NameNode上除了最新的檢查點(diǎn)以外,所有的其他的歷史鏡像和edits文件都丟失了, NameNode可以引入這個(gè)最新的檢查點(diǎn)。以下操作可以實(shí)現(xiàn)這個(gè)功能。
在配置參數(shù)dfs.name.dir指定的位置建立一個(gè)空文件夾;
把檢查點(diǎn)目錄的位置賦值給配置參數(shù)fs.checkpoint.dir;
啟動(dòng)NameNode,并加上-importCheckpoint。
NameNode會(huì)從fs.checkpoint.dir目錄讀取檢查點(diǎn),并把它保存在dfs.name.dir目錄下。如果dfs.name.dir目錄下有合法的鏡像文件,NameNode會(huì)啟動(dòng)失敗。NameNode會(huì)檢查fs.checkpoint.dir目錄下鏡像文件的一致性,但是不會(huì)去改動(dòng)它。
注:關(guān)于NameNode是什么時(shí)候?qū)⒏膭?dòng)寫到edit logs中的?這個(gè)操作實(shí)際上是由DataNode的寫操作觸發(fā)的,當(dāng)我們往DataNode寫文件時(shí),DataNode會(huì)跟NameNode通信,告訴NameNode什么文件的第幾個(gè)block放在它那里,NameNode這個(gè)時(shí)候會(huì)將這些元數(shù)據(jù)信息寫到edit logs文件中。
下面附上官方文檔說(shuō)明:
The NameNode stores modifications to the file system as a log appended to a native file system file, edits. When a NameNode starts up, it reads HDFS state from an image file, fsimage, and then applies edits from the edits log file. It then writes new HDFS state to the fsimage and starts normal operation with an empty edits file. Since NameNode merges fsimage and edits files only during start up, the edits log file could get verylarge over time on a busy cluster. Another side effect of a larger edits file is that next restart of NameNode takes longer.
The secondary NameNode merges the fsimage and the edits log files periodically and keeps edits log size within a limit. It is usually run ona different machine than the primary NameNode since its memory requirements are on the same order as the primary NameNode.
The start of the checkpoint process on the secondary NameNode is controlled by two configuration parameters.
* dfs.namenode.checkpoint.period, set to 1 hour by default, specifies the maximum delay between two consecutive checkpoints, and
* dfs.namenode.checkpoint.txns, set to 1 million by default, defines the number of uncheckpointed transactions on the NameNode which will force an urgent checkpoint, even if the checkpoint period has not been reached.
The secondary NameNode stores the latest checkpoint in a directory which is structured the same way as the primary NameNode's directory. So that the check pointed image is always ready to be read by the primary NameNode if necessary.
以上是“Secondary NameNode的功能是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!