NameNode工作機制
0)啟動概述
Namenode啟動時,首先將映像文件(fsimage)載入內存,並執行編輯日志(edits)中的各項操作。一旦在內存中成功建立文件系統元數據的映像,則創建一個新的fsimage文件和一個空的編輯日志。此時,namenode開始監聽datanode請求。但是此刻,namenode運行在安全模式,即namenode的文件系統對於客戶端來說是只讀的。
系統中的數據塊的位置並不是由namenode維護的,而是以塊列表的形式存儲在datanode中。在系統的正常操作期間,namenode會在內存中保留所有塊位置的映射信息。在安全模式下,各個datanode會向namenode發送最新的塊列表信息,namenode了解到足夠多的塊位置信息之后,即可高效運行文件系統。
如果滿足“最小副本條件”,namenode會在30秒鍾之后就退出安全模式。所謂的最小副本條件指的是在整個文件系統中99.9%的塊滿足最小副本級別(默認值:dfs.replication.min=1)。在啟動一個剛剛格式化的HDFS集群時,因為系統中還沒有任何塊,所以namenode不會進入安全模式。
1)第一階段:namenode啟動(根據客戶端的請求記錄fsimage和edits,在內存中進行增刪改查)
(1)第一次啟動namenode格式化后,創建HDFS鏡像文件fsimage和編輯日志文件edits。如果不是第一次啟動,直接加載編輯日志和鏡像文件到內存。
(HDFS的鏡像文件FsImage包含着集群所有文件的元數據信息;編輯日志edits類似“賬本”記錄數據操作)
(2)客戶端對元數據進行增刪改的請求
(3)namenode記錄操作日志,更新滾動日志(“記賬”)到edits.002、edits.inprogress為接下來用的edits
(4)namenode在內存中對數據進行增刪改查
2)第二階段:Secondary NameNode工作(幫助NameNode具體操作edits和fsimage文件,NameNode只是在內存中執行增刪改查)
(1)Secondary NameNode詢問namenode是否需要checkpoint。直接帶回namenode是否檢查結果。
(checkpoint判斷條件:① 定時時間到,默認1小時 ② edits中造作動作次數已滿,默認100萬)
(2)Secondary NameNode請求執行checkpoint。
(3)namenode滾動正在寫的edits日志(將目前的edits.inprogress寫入edits.003)
(4)將滾動前的編輯日志(edits.002、edits.003)和鏡像文件拷貝到Secondary NameNode
(5)Secondary NameNode將編輯日志和鏡像文件加載到內存並合並。
(6)生成新的鏡像文件fsimage.chkpoint
(7)拷貝fsimage.chkpoint到namenode
(8)namenode將fsimage.chkpoint重新命名成fsimage
3)web端訪問SecondaryNameNode
(1)啟動集群
(2)瀏覽器中輸入:http://hadoop102:50090/status.html
(3)查看SecondaryNameNode信息
4)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>