您好,登錄后才能下訂單哦!
這篇文章主要講解了“Java Hadoop的NameNode和SecondaryNameNode有什么用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java Hadoop的NameNode和SecondaryNameNode有什么用”吧!
NN和2NN工作機制
思考:NameNode中的元數據是存儲在哪里的?
如果我們假設元數據存儲在NameNode節點的磁盤中,因為經常需要進行隨機訪問,還有響應客戶請求,那么效率肯定很低。因此,元數據需要放在內存中。但如果只存在內存中,一旦斷電,元數據就會丟失,整個集群就不能工作了。因此就產生在磁盤中備份元數據的FsImage中。
這樣又會有新的問題出現,當內存中的元數據更新時,如果同時更新FsImage,就會導致效率過低,但如果不更新,又會發生一致性問題,一旦NameNode節點斷電,就會產生數據丟失。因此,引入Edits文件(這個文件只進行追加操作,效率很高)。每當元數據有更新或者添加元數據時,先把日志記錄到Edits中,然后修改內存中的元數據。這樣,一旦NameNode節點斷電,可以通過FsImage和Edits的合并,合成元數據。
但是,如果長時間添加數據到Edits中,又會導致該文件數據過大,從而效率降低,并且一旦斷電,恢復元數據需要的時間過長。因此,需要定期進行FsImage和Edits的合并,如果這個操作由NameNode節點完成,又會效率過低。于是乎第二主角登場了,引入一個新的節點SecondaryNamenode,他的作用就是專門用于FsImage和Edits的合并。
工作機制如圖所示
第一階段:namenode啟動
(1)第一次啟動namenode格式化后(format),創建fsimage鏡像和edits編輯日志文件。如果不是第一次啟動,會直接加載編輯日志和鏡像文件到內存。
(2)客戶端請求元數據進行增刪改。
(3)namenode對操作記錄日志,更新滾動日志。
(4)然后,namenode對內存的數據進行增刪改
第二階段:Secondary NameNode工作
(1)Secondary NameNode詢問namenode是否需要checkpoint,就是是否需要檢查。直接帶回namenode是否檢查結果。
(2)Secondary NameNode請求執行checkpoint,也就是進行檢查。
(3)namenode滾動正在寫的edits編輯日志
(4)將滾動前的edits編輯日志和fsimage鏡像文件拷貝到Secondary NameNode節點
(5)Secondary NameNode加載編輯日志和鏡像文件到內存,并且進行合并
(6)生成新的鏡像文件fsimage.chkpoint文件
(7)拷貝fsimage.chkpoint到namenode節點
(8)namenode將fsimage.chkpoint重新命名成fsimage,替換了原來的鏡像
chkpoint檢查時間參數設置
(1)通常情況下,SecondaryNameNode每隔一小時執行一次。
配置文件:hdfs-default.xml
<property> <name>dfs.namenode.checkpoint.period</name> <value>3600</value></property>
(2)一分鐘檢查一次操作次數,當操作次數達到1百萬時,SecondaryNameNode執行一次。
<property>
<name>dfs.namenode.checkpoint.txns</name>
<value>1000000</value>
<description>操作動作次數</description>
</property>
<property>
<name>dfs.namenode.checkpoint.check.period</name>
<value>60</value>
<description> 1分鐘檢查一次操作次數</description>
</property>
感謝各位的閱讀,以上就是“Java Hadoop的NameNode和SecondaryNameNode有什么用”的內容了,經過本文的學習后,相信大家對Java Hadoop的NameNode和SecondaryNameNode有什么用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。