Namenode保存文件系統元數據鏡像,namenode在內存及磁盤(fsimage和editslog)上分別存在一份元數據鏡像文件,內存中元數據鏡像保證了hdfs文件系統文件訪問效率,磁盤上的元數據鏡像保證了hdfs文件系統的安全性。node
namenode在磁盤上的兩類文件組成:安全
fsimage文件:保存文件系統至上次checkpoint爲止目錄和文件元數據。oop
edits文件:保存文件系統從上次checkpoint起對hdfs的全部操做記錄日誌信息。spa
fsimage和editlog文件能夠在本地文件系統看到,以下圖:日誌
首次安裝格式化(format)主要做用是在本地文件系統生成fsimage文件。orm
一、首此啓動hdfs過程:blog
啓動namenode:進程
讀取fsimage生成內存中元數據鏡像。ip
啓動datanode:內存
向namenode發送blockreport。
啓動成功後,client能夠對HDFS進行目錄建立、文件上傳、下載、查看、重命名等操做,更改namespace的操做將被記錄在edits文件中。
二、以後啓動HDFS文件系統過程:
啓動namenode:
讀取fsimage元數據鏡像文件,加載到內存中。
讀取editlog日誌文件,加載到內存中,使當前內存中元數據信息與上次關閉系統時保持一致。而後在磁盤上生成一份同內存中元數據鏡像相同的fsimage文件,同時生成一個新的null的editlog文件用於記錄之後的hdfs文件系統的更改。
啓動datanode:
向namenode註冊;
向namenode發送blockreport。
啓動成功後,client能夠對HDFS進行目錄建立、文件上傳、下載、查看、重命名等操做,更改namespace的操做將被記錄在editlog文件中。
輔助namenode,不能代替namenode。
SecondaryNameNode的主要做用是用於合併fsimage和editlog文件。在沒有SecondaryNameNode守護進程的狀況下,從namenode啓動開始至namenode關閉期間全部的HDFS更改操做都將記錄到editlog文件,這樣會形成巨大的editlog文件,所帶來的直接危害就是下次啓動namenode過程會很是漫長。
在啓動SecondaryNameNode守護進程後,每當知足必定的觸發條件(每3600s、文件數量增長100w等),SecondaryNameNode都會拷貝namenode的fsimage和editlog文件到本身的目錄下,首先將fsimage加載到內存中,而後加載editlog文件到內存中合併fsimage和editlog文件爲一個新的fsimage文件,而後將新的fsimage文件拷貝回namenode目錄下。而且聲稱新的editlog文件用於記錄DFS的更改。
四、安全模式
在啓動namenode至全部datanode啓動完成前的階段成爲安全模式。在安全模式下,client只能讀取部分HDFS文件信息,不容許client對HDFS的任何更改操做,好比建立目錄、上傳文件、刪除文件、重命名文件等。
namenode推出安全模式條件須要知足如下條件:
datanodes blocks/total blocks >= 99.999% + 30s(緩衝時間) 此時安全模式纔會推出
1)secondary通知namenode切換edits文件
2)secondary經過http請求從namenode得到fsimage和edits文件
3)secondary將fsimage載入內存,而後開始合併edits
4)secondary將新的fsimage發回給namenode
5)namenode用新的fsimage替換舊的fsimage
Secondary namenode工做流程經過一張圖能夠表示爲:
手工維護安全模式指令:
bin/hdfs dfsadmin -safemode <enter | leave | get | wait>
例如:
[hadoop@db01 ~]$ hdfs dfsadmin -safemode get
Safe mode is OFF