2022-11-11
文件 namenode fsimage secondarynamenode
在HDFS相關(guān)的守護(hù)進(jìn)程中,有NameNode進(jìn)程、DataNode進(jìn)程、SecondaryNameNode進(jìn)程等。NameNode和DataNode職責(zé)比較明確,我們都知道是做什么的,那么SecondaryNameNode的作用是什么呢?為什么SecondayNameNode要和NameNode部署在不同的節(jié)點(diǎn)上呢?有人說SecondaryNameNode是NameNode的備份,這種說法正確嗎?我們來理解一下SecondaryNameNode是什么,主要是做什么工作的。
在正式的介紹SecondaryNameNode之前,我們先來認(rèn)識(shí)兩種文件: fsimage 和 eidts。我們都知道NameNode有一個(gè)作用就是維護(hù)HDFS分布式文件系統(tǒng)的目錄樹結(jié)構(gòu)。在HDFS上有什么目錄、每一個(gè)目錄下又有什么文件等等,這些信息是需要維護(hù)的。
NameNode在內(nèi)存中維護(hù)文件系統(tǒng)的目錄樹結(jié)構(gòu),而這樣的目錄樹結(jié)構(gòu)隨著HDFS的重啟不會(huì)丟失,也就說明NameNode會(huì)將其序列化到本地磁盤上,以文件的形式保存下來。這個(gè)文件就是fsimage文件。我們可以在NameNode所在的節(jié)點(diǎn)發(fā)現(xiàn)這個(gè)文件。
那么,是不是我們每次對(duì)HDFS進(jìn)行操作的時(shí)候,NameNode都會(huì)將內(nèi)存中記錄的HDFS的目錄樹結(jié)構(gòu)序列化下來呢?顯然不應(yīng)該是這樣的,因?yàn)槿绻愕奈募到y(tǒng)中的文件比較多、比較復(fù)雜,在內(nèi)存中維護(hù)的數(shù)據(jù)量也會(huì)比較龐大,我們假設(shè)1G。那么如果每當(dāng)對(duì)目錄樹結(jié)構(gòu)產(chǎn)生了修改之后,都需要將內(nèi)存中的數(shù)據(jù)序列化到磁盤上的話,就產(chǎn)生大量的磁盤IO。而且在序列化期間,如果NameNode宕機(jī)的話,會(huì)出現(xiàn)數(shù)據(jù)丟失的情況。
因此,NameNode并不會(huì)實(shí)時(shí)的將每一次的變更都序列化到本地磁盤上。而是會(huì)周期性的進(jìn)行序列化,一般來說一個(gè)小時(shí)序列化一次,生成fsimage文件。那么在這一個(gè)小時(shí)的時(shí)間之內(nèi),如果產(chǎn)生了新的文件結(jié)構(gòu)變更怎么辦?這個(gè)時(shí)候,NameNode會(huì)將新的操作以edit log的形式保存在文件中,edit log中并不會(huì)保存全部的目錄結(jié)構(gòu),而只是記錄了某一次的變更操作。
在NameNode啟動(dòng)的時(shí)候,首先加載本地磁盤上的fsimage文件,將一個(gè)完整的目錄結(jié)構(gòu)讀取到內(nèi)存中。然后再依次讀取每一個(gè)edit log中的記錄,在內(nèi)存中進(jìn)行推薦,對(duì)目錄樹結(jié)構(gòu)進(jìn)行推演。這樣就可以得到上次關(guān)機(jī)的時(shí)候完整的目錄樹結(jié)構(gòu)。
那么,SecondaryNameNode是干什么的呢?上面提到了,NameNode會(huì)周期性的對(duì)內(nèi)存中的目錄結(jié)構(gòu)進(jìn)行序列化,生成fsimage文件。其實(shí)這個(gè)工作是由SecondaryNameNode來完成的。SecondaryNameNode會(huì)輔助NameNode進(jìn)行fsimage和edit log的合并工作,減小editlog的大小,從而能夠縮減下一次啟動(dòng)NameNode的時(shí)間。兩個(gè)文件的合并周期,稱之為檢查點(diǎn)機(jī)制(checkpoint),是可以通過hdfs-default.xml配置文件進(jìn)行修改的:
<property>
<name>dfs.namenode.checkpoint.period</name>
<value>3600</value>
<description>兩次檢查點(diǎn)間隔的秒數(shù),默認(rèn)是1個(gè)小時(shí)</description>
</property>
<property>
<name>dfs.namenode.checkpoint.txns</name>
<value>1000000</value>
<description>txid執(zhí)行的次數(shù)達(dá)到100w次,也執(zhí)行checkpoint</description>
</property>
<property>
<name>dfs.namenode.checkpoint.check.period</name>
<value>60</value>
<description>60秒一檢查txid的執(zhí)行次數(shù)</description>
</property>
1. SecondaryNamenode請(qǐng)求Namenode停止使用正在編輯的editlog文件,Namenode會(huì)創(chuàng)建新的editlog文件,同時(shí)更新seed_txid文件。
2. SecondaryNamenode通過HTTP協(xié)議獲取Namenode上的fsimage和editlog文件。
3. SecondaryNamenode將fsimage讀進(jìn)內(nèi)存當(dāng)中,并逐步分析editlog文件里的數(shù)據(jù),進(jìn)行合并操作,然后寫入新文件fsimage_x.ckpt文件中。
4. SecondaryNamenode將新文件fsimage_x.ckpt通過HTTP協(xié)議發(fā)送回Namenode。
5. Namenode再進(jìn)行更名操作。
開班時(shí)間:2021-04-12(深圳)
開班盛況開班時(shí)間:2021-05-17(北京)
開班盛況開班時(shí)間:2021-03-22(杭州)
開班盛況開班時(shí)間:2021-04-26(北京)
開班盛況開班時(shí)間:2021-05-10(北京)
開班盛況開班時(shí)間:2021-02-22(北京)
開班盛況開班時(shí)間:2021-07-12(北京)
預(yù)約報(bào)名開班時(shí)間:2020-09-21(上海)
開班盛況開班時(shí)間:2021-07-12(北京)
預(yù)約報(bào)名開班時(shí)間:2019-07-22(北京)
開班盛況Copyright 2011-2023 北京千鋒互聯(lián)科技有限公司 .All Right 京ICP備12003911號(hào)-5 京公網(wǎng)安備 11010802035720號(hào)