HDFS的管理節點是NameNode,用于存儲并管理中繼資料。那麼具體的檔案資料存儲在哪裡呢?DataNode就是負責存儲資料的元件,一個資料塊Block會在多個DataNode中進行備援備份;而一個DataNode對于一個塊最多隻包含一個備份。是以可以簡單地認為DataNode上存儲了資料塊ID和資料塊内容,以及它們的映射關系。一個HDFS叢集可能包含上千個DataNode節點,這些DataNode定時和NameNode進行通信,接受NameNode的指令,為了減輕NameNode的負擔,NameNode上并不永久儲存哪個DataNode上有哪些資料塊的資訊,而是通過DataNode啟動時的上報來更新NameNode上的映射表。DataNode和NameNode建立連接配接後,就會不斷地和NameNode保持聯系,回報資訊中也包含了NameNode對DataNode的一些指令,如删除資料庫或者把資料塊複制到另一個DataNode。應該注意的是:NameNode不會發起到DataNode的請求,在這個通信過程中,它們嚴格遵從用戶端/伺服器架構。
當然DataNode也作為伺服器接受來自用戶端的i方問,處理資料塊讀/寫請求。DataNode之間還會互相通信,執行資料塊複制任務,同時,在用戶端執行寫操作的時候,DataNode之間需要互相配合,以保證寫操作的一緻性。
HDFS體系結構中有兩類節點,一類是NameNode,另一類是DataNode。這兩類節點分别承擔Master和Worker的任務。NameNode就是Master管理叢集中的執行排程,DataNode就是Worker具體任務的執行節點。NameNode管理檔案系統的命名空間,維護整個檔案系統的檔案目錄樹及這些檔案的索引目錄(本質上還是名字)。這些資訊以兩種形式存儲在本地檔案系統中,一種是命名空間鏡像(Namespaee image );一種是編輯日志(Edit log )。從NameNode中你可以獲得每個檔案的每個塊所在的DataNode。有一點需要注意的是,這些資訊不是永久儲存的,NameNode會在每次啟動系統時動态地重建這些資訊。當運作任務時,用戶端通過NameNode擷取中繼資料資訊,和DataNode進行互動以通路整個檔案系統。系統會提供一個類似于POSIX的檔案接口,這樣使用者在程式設計時無須考慮NameNode和DataNode的具體功能。
DataNode是檔案系統Worker中的節點,用來執行具體的任務:存儲檔案塊,被用戶端和NameNode調用。同時,它會通過心跳(Heartbeat)定時向NameNode發送所存儲的檔案塊資訊。
本文轉自大資料躺過的坑部落格園部落格,原文連結:http://www.cnblogs.com/zlslch/p/5081183.html,如需轉載請自行聯系原作者