HDFS(Hadoop Distributed File System)是Hadoop項目的一部分,用于存儲海量數據。HDFS設計為可以在廉價硬件上運行,同時提供高容錯性。HDFS主要由三個關鍵角色組成:NameNode、DataNode和SecondaryNameNode。下面我用大白話來詳細解釋這些角色的功能和作用:
1. NameNode
NameNode 可以想象成圖書館里的圖書管理員,它不存儲書(數據),而是管理著圖書館的目錄和書籍的位置信息。在HDFS中,NameNode負責管理文件系統的元數據,這包括文件和目錄的層次結構、文件的權限信息、文件被分割成哪些塊以及每個塊存儲在哪些DataNode上。當有用戶想要讀取或寫入文件時,NameNode告訴用戶文件的塊在哪里,就像圖書管理員告訴你書在哪個書架一樣。
2. DataNode
DataNode 相當于圖書館的書架和書籍本身,它們負責存儲和維護HDFS中的實際數據。每個DataNode定期向NameNode報告自己的健康狀況和所擁有的數據塊信息。當有寫入請求時,DataNode會按照NameNode的指示存儲數據塊,并確保數據塊的副本數符合設定,以增加數據的可靠性。當有讀取請求時,DataNode提供數據塊供用戶讀取。
3. SecondaryNameNode
SecondaryNameNode 不是另一個NameNode,更像是NameNode的助手或者說是備份助手。它并不存儲元數據的實時備份,而是定期合并NameNode的fsimage(包含文件系統元數據)和edit log(包含最近的操作記錄),減少NameNode重啟時需要重放的日志量,從而加快NameNode的啟動時間。SecondaryNameNode幫助NameNode進行日志的清理和合并,但并不是集群運行的必要組成部分,它的缺失不會導致集群不可用。
這三個角色共同協作,使得HDFS能夠存儲和管理大規模數據集,即使在部分節點失效的情況下也能保持數據的可用性和一致性。在Hadoop集群中,通常有一個NameNode,多個DataNode,以及一個SecondaryNameNode(或有時多個,用于更高的可用性)。這種架構設計使得HDFS能夠在成本較低的硬件上構建出高可靠、可擴展的數據存儲系統。
在Hadoop生態系統中,RM(ResourceManager)、NM(NodeManager)和JN(JobHistoryServer)這幾個組件都屬于Apache Hadoop YARN(Yet Another Resource Negotiator)框架的一部分。不過,JN(JobHistoryServer)在Hadoop 2.x之后的版本中,更多地與MapReduce應用歷史記錄服務相關聯。
4. ResourceManager (RM)
ResourceManager 就像是一個“總管”,它負責整個Hadoop集群的資源分配工作。就像一個派對的組織者決定每個人應該坐在哪里一樣,ResourceManager決定你的計算任務應該在哪里的機器上運行。它還會監督所有任務的運行情況,確保一切都按計劃進行。
5.NodeManager (NM)
NodeManager 是每臺計算機(節點)上的“助手”。它的主要工作是聽ResourceManager的命令,準備和清理任務運行的環境,確保任務能夠順利開始和結束。就像是一個餐廳里的服務員,當有客人點餐時,服務員負責上菜和清理餐桌。
6.JobHistoryServer (JN)
JobHistoryServer 相當于一個“歷史記錄員”。它的工作是記錄所有的計算任務是怎么運行的,結果如何,以及運行過程中發生了什么問題。這樣,如果有人想查看過去的任務狀態,或者分析為什么某些任務失敗了,就可以通過JobHistoryServer找到答案。
總結一下,ResourceManager是指揮官,NodeManager是前線工人,而JobHistoryServer是記錄歷史的檔案管理員。它們一起協作,確保Hadoop集群能夠高效、穩定地運行各種計算任務。