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