名稱節點的數據結構
- 在HDSFS中,名稱節點(namenode)負責管理分布式文件系統的命名空間(Namespace),保存了兩個核心的數據結構,即FsImage和EditLog。
- 名稱節點記錄了每個文件中各個塊所在的數據節點的位置信息。
FsImage用於維護文件系統樹以及文件樹中所有的文件和文件夾的額元數據
EditLog操作日志中記錄了所有針對文件的創建、刪除、重命名等操作
FsImage文件
-
FsImage文件包含文件系統中所有目錄和文件inode的序列化形式。每個inode是一 個文件或目錄的元數據的內部表示,並包含此類信息:文件的復制等級、修改和訪問 時間、訪問權限、塊大小以及組成文件的塊。對於目錄,則存儲修改時間、權限和配 額元數據
- FsImage文件沒有記錄塊存儲在哪個數據節點。而是由名稱節點把這些映射保留在 內存中,當數據節點加入HDFS集群時,數據節點會把自己所包含的塊列表告知給名 稱節點,此后會定期執行這種告知操作,以確保名稱節點的塊映射是最新的
名稱節點的啟動
- 在名稱節點啟動的時候,它會將FsImage文件中的內容加載到內存中,之后再執行 EditLog文件中的各項操作,使得內存中的元數據和實際的同步,存在內存中的元數 據支持客戶端的讀操作。
- 一旦在內存中成功建立文件系統元數據的映射,則創建一個新的FsImage文件和一個 空的EditLog文件
- 名稱節點起來之后,HDFS中的更新操作會重新寫到EditLog文件中,因為FsImage 文件一般都很大(GB級別的很常見),如果所有的更新操作都往FsImage文件中添 加,這樣會導致系統運行的十分緩慢,但是,如果往EditLog文件里面寫就不會這樣 ,因為EditLog 要小很多。每次執行寫操作之后,且在向客戶端發送成功代碼之前, edits文件都需要同步更新
- 在名稱節點運行期間,HDFS的所有更新操作會直接寫到EditLog中,長久下去導致文件變大,會使得名稱節點啟動操作非常慢,而在這段時間內HDFS系統處於 安全模式,一直無法對外提供寫操作,影響了用戶的使用,所以就會有第二個名稱節點(SecondaryNameNode)的使用。
數據節點(DataNode)
- 數據節點是分布式文件系統HDFS的工作節點,負責數據的存儲和讀取,會根據客 戶端或者是名稱節點的調度來進行數據的存儲和檢索,並且向名稱節點定期發送自己 所存儲的塊的列表(
- 每個數據節點中的數據會被保存在各自節點的本地Linux文件系統中
