一、元數據是什么
在HDFS中,元數據主要指的是文件相關的元數據,通過兩種形式來進行管理維護,第一種是內存,維護集群數據的最新信息,第二種是磁盤,對內存中的信息進行維護與持久化,由namenode管理維護。從廣義的角度來說,因為namenode還需要管理眾多的DataNode結點,因此DataNode的位置和健康狀態信息也屬于元數據。
二、文件的組成
meta:文件的索引,文件和目錄是文件系統的基本元素,HDFS將這些元素抽象成INode,每一個文件或目錄都對應一個唯一的INode。
block:真實的數據存儲的位置,Block是對于文件內容組織而言的,按照固定大小,順序對文件進行劃分并編號,劃分好的每一個塊就稱之為一個Block。
三、namenode的功能
1、管理HDFS命名空間(文件目錄樹及其目錄與文件的元數據),并以fsimage進行持久化保存。
2、處理客戶端的訪問,并將修改動作記錄到edits文件中。
3、在內存中維護數據塊的映射信息,即塊文件與datanode的對應關系,namenode只在內存中維護此關系,不會永久化到磁盤上,因此在集群剛啟動是,namenode中并沒有塊文件與datanode的對應關系,需要datanode上報自身的塊文件信息后,才可以正常工作。
4、實施副本冗余策略,當實際副本數小于配置數時,會啟動復制塊的線程,直到個數達配置數。
四、namenode的啟動過程
- 加載預先生成的持久化文件fsimage。
- 加載沒有完成處理的edit log文件。
- 等待DataNode注冊和匯報其所包含的block數據,校驗meta信息和block數據是否一致。
五、datanode的全量上報過程
- DataNode啟動后通過RPC方式向NameNode注冊,注冊時攜帶的信息有:Software Version(當前DataNode版本號) storageInfo(集群信息)DataNodeId(節點自身信息)
- 全量上報當前DataNode所有的block塊信息,包括block ID、所屬文件、存儲位置等,目的分別是使用NameNode維護集群數據,與meta進行校驗。
-
維護集群數據:NameNode需要知道集群中每個DataNode上存儲了哪些block塊以及其所屬的文件信息,以便在需要時能夠有效地管理和調度這些數據塊。DataNode會周期性地向NameNode報告自己所存儲的所有block塊的信息,包括block ID、所屬文件、存儲位置等。
-
校驗meta:在Hadoop集群中,為了確保數據的一致性和完整性,通常會使用Checksum來對數據進行校驗。當DataNode上報block塊信息時,NameNode會使用這些信息來驗證各個DataNode上的block塊是否完整、準確,并且與元數據中記錄的信息一致。這樣可以確保數據在集群中的可靠性。
- 例如,當一個DataNode上報block塊信息給NameNode時,NameNode會檢查這些信息,確保每個block塊的ID、所屬文件、復本數量等信息都是正確的。同時,NameNode也會對這些block塊所在的DataNode進行通信,驗證每個block塊的Checksum值,以確保數據的完整性和一致性,Checksum是存儲在DataNode的塊信息中的,與數據一起存儲。全量上報的時候,通過RPC一次性將所有的block發送給namenode比較浪費資源,采用限制分批次的方式,一次只能處理100w的block。
- NameNode收到后,向元數據中記錄
- DataNode每周期上報塊信息(默認6小時,可配置)
- 心跳檢測,三秒一次
- DataNode超過10分鐘+30秒沒有上報心跳,則NameNode將該節點移出認為該節點不可用
六、FSNamesystem的主要功能
-
命名空間管理: FSNamesystem負責維護HDFS的命名空間,包括文件和目錄的創建、刪除、重命名等操作,以及管理命名空間中的元數據信息。FSDirectory
-
數據塊管理: FSNamesystem負責管理HDFS中數據塊的分配、復制、移動和刪除等操作,確保數據塊的可靠性和高可用性。BlockManager(維護集群中的數據塊信息和數據塊狀態)
-
安全性管理: FSNamesystem負責對HDFS中的文件和目錄進行權限控制,驗證用戶對文件系統的訪問權限,并確保數據的安全性。
-
故障處理: FSNamesystem能夠檢測和處理DataNode的故障,及時調整數據塊的復制策略,以保證數據的可靠性和完整性。
-
元數據持久化:</