一、NameNode啟動時如何維護元數(shù)據(jù):
1、概念介紹:
Edits文件:NameNode在本地操作hdfs系統(tǒng)的文件都會保存在Edits日志文件中。也就是說當文件系統(tǒng)中的任何元數(shù)據(jù)產(chǎn)生操作時,都會記錄在Edits日志文件中。eg:在HDFS上創(chuàng)建一個文件,NameNode就會在Edits中插入一條記錄。同樣如果修改或者刪除等操作,也會在Edits日志文件中新增一條數(shù)據(jù)。
FsImage映像文件:包括數(shù)據(jù)塊到文件的映射,文件的屬性等等,都存儲在一個稱為FsImage的文件中,這個文件也是放在NameNode所在的文件系統(tǒng)中。
2、流程介紹:
①、加載fsimage映像文件到內(nèi)存
②、加載edits文件到內(nèi)存
③、在內(nèi)存將fsimage映像文件和edits文件進行合并
④、將合并后的文件寫入到fsimage中
⑤、清空原先edits中的數(shù)據(jù),使用一個空的edits文件進行正常操作
3、流程圖分析:

4、疑問
因為NameNode只有在啟動的階段才合并fsimage和edits,那么如果運行時間長了,edits文件可能會越來越大,在下一次啟動NameNode時會花很長的時間,請問能否讓fsimage映像文件和edits日志文件定期合并呢?
答案肯定是可以的,為了解決這個問題我們就要用到Secondary NameNode了,Secondary NameNode主要的作用是什么呢?他是如何將fsimage和edits進行合并的呢?帶著疑問再次進行分析。
二、Secondary NameNode工作流程:
1、Secondary NameNode和NameNode的區(qū)別:
NameNode:
①、存儲文件的metadata,運行時所有數(shù)據(jù)都保存在內(nèi)存中,這個的HDFS可存儲的文件受限于NameNode的內(nèi)存。
②、NameNode失效則整個HDFS都失效了,所以要保證NameNode的可用性。
Secondary NameNode:
①、定時與NameNode進行同步,定期的將fsimage映像文件和Edits日志文件進行合并,并將合并后的傳入給NameNode,替換其鏡像,并清空編輯日志。如果NameNode失效,需要手動的將其設置成主機。
②、Secondary NameNode保存最新檢查點的目錄和NameNode的目錄結構相同。所以NameNode可以在需要的時候應用Secondary NameNode上的檢查點鏡像。
2、什么時候checkpoint
①、連續(xù)兩次的檢查點最大時間間隔,默認是3600秒,可以通過配置“fs.checkpoint.period”進行修改
②、Edits日志文件的最大值,如果超過這個值就會進行合并即使不到1小時也會進行合并??梢酝ㄟ^“fs.checkpoint.size”來配置,默認是64M;
3、Secondary NameNode的工作流程
①、NameNode通知Secondary NameNode進行checkpoint。
②、Secondary NameNode通知NameNode切換edits日志文件,使用一個空的。
③、Secondary NameNode通過Http獲取NmaeNode上的fsimage映像文件(只在第一次的時候)和切換前的edits日志文件。
④、Secondary NameNode在內(nèi)容中合并fsimage和Edits文件。
⑤、Secondary NameNode將合并之后的fsimage文件發(fā)送給NameNode。
⑥、NameNode用Secondary NameNode 傳來的fsImage文件替換原先的fsImage文件。
4、流程圖分析:
