第一個關(guān)系即目錄樹、元數(shù)據(jù)和數(shù)據(jù)塊的索引信息會 持久化到物理存儲 中,實現(xiàn)是保存在命名空間的鏡像 fsimage 和編輯 日志edits 中, 注意: 在fsimage中, 并沒有記錄每一個block對應(yīng)到哪幾個Datanodes的對應(yīng)表信息
第二個關(guān)系是在NameNode啟動后,每個Datanode對本地磁盤進行掃描,將 本Datanode上保存的block信息匯報給Namenode ,Namenode在接收到每個Datanode的塊信息匯報后,將接收到的塊信息,以及其所在的Datanode信息等保存在內(nèi)存中。HDFS就是通過這種塊信息匯報的方式來 完成 block -> Datanodes list的對應(yīng)表構(gòu)建
fsimage 記錄了自最后一次檢查點之前HDFS文件系統(tǒng)中所有目錄和文件的序列化信息;
edits 是元數(shù)據(jù)操作日志(記錄每次保存fsimage之后到下次保存之間的所有hdfs操作)
在NameNode啟動時候,會先將fsimage中的文件系統(tǒng)元數(shù)據(jù)信息 加載到內(nèi)存 ,然后根據(jù)eidts中的記錄將內(nèi)存中的元數(shù)據(jù) 同步至最新狀態(tài), 將這個新版本的 FsImage 從內(nèi)存中保存到本地磁盤上,然后刪除 舊的 Editlog,這個過程稱為一個 檢查 點(checkpoint), 多長時間做一次 checkpoint?( 見第四章 參數(shù)配置 ) checkpoint 能手工觸發(fā)嗎? 驗證重啟hdfs服務(wù)后editlog沒刪除呢?
類似于???據(jù)庫中的檢查點,為了避免edits日志過大,在Hadoop1.X中,SecondaryNameNode會按照時間閾值(比如24小時)或者edits大小閾值(比如1G),周期性的將fsimage和edits的合并,然后將最新的fsimage推送給NameNode。而在Hadoop2.X中,這個動作是由Standby NameNode來完成 .
由此可看出,這兩個文件一旦損壞或丟失,將導(dǎo)致整個HDFS文件系統(tǒng)不可用,在HDP2.4安裝(五):集群及組件安裝 集 群安裝過程中,hdfs 默認(rèn)的只能選擇一個NN,是否意味著 NN存在單點呢?( 見第二單 hdfs HA)
在hadoop1.X為了保證這兩種元數(shù)據(jù)文件的高可用性,一般的做法,將 dfs.namenode.name.dir設(shè)置成以逗號分隔的多個目錄 ,這多個目錄至少不要在一塊磁盤上,最好放在不同的機器上,比如:掛載一個共享文件系統(tǒng)
fsimage\edits 是序列化后的文件,想要查看或編輯里面的內(nèi)容,可通過 hdfs 提供的 oiv\oev 命令,如下:
命令: hdfs oiv (offline image viewer) 用于將fsimage文件的內(nèi)容轉(zhuǎn)儲到指定文件中以便于閱讀, ,如文本文件、XML文件,該命令需要以下參數(shù):
命令: hdfs oev (offline edits viewer 離線edits查看器)的縮寫, 該工具只操作文件因而并不需要hadoop集群處于運行狀態(tài)。
小結(jié):
NameNode管理著DataNode,接收DataNode的注冊、心跳、數(shù)據(jù)塊提交等信息的上報,并且在心跳中發(fā)送數(shù)據(jù)塊復(fù)制、刪除、恢復(fù)等指令;同時,NameNode還為客戶端對文件系統(tǒng)目錄樹的操作和對文件數(shù)據(jù)讀寫、對HDFS系統(tǒng)進行管理提供支持
Namenode 啟動后會進入一個稱為 安全模式 的特殊狀態(tài)。處于安全模式 的 Namenode 是不會進行數(shù)據(jù)塊的復(fù)制的。 Namenode 從所有的 Datanode 接收心跳信號和塊狀態(tài)報告 。塊狀態(tài)報告包括了某個 Datanode 所有的數(shù)據(jù) 塊列表。每個數(shù)據(jù)塊都有一個指定的最小副本數(shù)。當(dāng) Namenode 檢測確認(rèn)某 個數(shù)據(jù)塊的副本數(shù)目達到這個最小值,那么該數(shù)據(jù)塊就會被認(rèn)為是副本安全 (safely replicated) 的;在一定百分比(這個參數(shù)可配置)的數(shù)據(jù)塊被 Namenode 檢測確認(rèn)是安全之后(加上一個額外的 30 秒等待時間), Namenode 將退出安全模式狀態(tài)。接下來它會確定還有哪些數(shù)據(jù)塊的副本沒 有達到指定數(shù)目,并將這些數(shù)據(jù)塊復(fù)制到其他 Datanode 上。
Secondary NameNode: 在HA cluster中又稱為standby node
定期合并 fsimage 和 edits 日志,將 edits 日志文件大小控制在一個限度下

namenode 響應(yīng) Secondary namenode 請求,將 edit log 推送給 Secondary namenode , 開始重新寫一個新的 edit log
Secondary namenode 收到來自 namenode 的 fsimage 文件和 edit log
Secondary namenode 將 fsimage 加載到內(nèi)存,應(yīng)用 edit log , 并生成一 個新的 fsimage 文件
Secondary namenode 將新的 fsimage 推送給 Namenode
Namenode 用新的 fsimage 取代舊的 fsimage , 在 fstime 文件中記下檢查 點發(fā)生的時
HDFS寫文件:
寫文件部分參考blog 地址 ( http://www.linuxidc.com/Linux/2016-09/134882.htm ),2.X版本默認(rèn)block的大小是 128M (見第四章參數(shù)配置)