HDFS組織架構
HDFS(Hadoop Distributed File System)是Hadoop生態(tài)系統(tǒng)中一個高可靠性、高吞吐量、高容錯性的分布式文件系統(tǒng)。它最初是Google發(fā)明的GFS(Google File System)的實現(xiàn), 根據(jù)Apache Hadoop Project組織架構,HDFS的組織架構如下:
-
Client
Client是與用戶交互的第一層,它處理和提供文件系統(tǒng)或者存儲集群的IO請求。Client可以是運行在Hadoop框架上面的應用程序,比如MapReduce作業(yè),也可以使用命令行來操作HDFS文件系統(tǒng)。
-
NameNode
NameNode是HDFS的主節(jié)點,是整個分布式文件系統(tǒng)的管理核心。它存儲了關于每一個文件和目錄的元數(shù)據(jù)信息,包括文件名、文件屬性、文件塊的位置信息等。此外,NameNode還負責處理客戶端讀寫請求,并將數(shù)據(jù)塊分配給相應的DataNode。
-
Secondary NameNode
Secondary NameNode不是NameNode的替代品,它是在備份NameNode的文件系統(tǒng)狀態(tài)信息方面起著幫助NameNode的作用。它定期從NameNode獲取最新的文件元數(shù)據(jù)信息并將其合并到fsimage(文件系統(tǒng)鏡像)中,同時再結(jié)合edits(編輯日志)來生成新的fsimage,在某些情況下可以減輕NameNode壓力。
-
DataNode
DataNode是存儲HDFS中實際數(shù)據(jù)塊的節(jié)點。它們負責接收客戶端讀寫請求來讀取或者寫入數(shù)據(jù),并向其他DataNode傳輸數(shù)據(jù)塊進行備份和復制,以保證數(shù)據(jù)副本數(shù)量在分布式集群中的存儲以及高可用性。
NameNode
NameNode 在啟動的時候會做哪些操作
在Hadoop集群中,NameNode是一個重要的組件,它負責管理文件系統(tǒng)命名空間和訪問控制等操作。當啟動NameNode時,它會執(zhí)行以下操作:
-
讀取配置文件:NameNode需要讀取相關的配置文件,例如core-site.xml、hdfs-site.xml等,以獲取必要參數(shù)。
-
校驗文件系統(tǒng)元數(shù)據(jù):NameNode會檢查文件系統(tǒng)元數(shù)據(jù),包括命名空間、權限和塊信息等是否存在損壞。如果文件系統(tǒng)損壞,則會嘗試從備份恢復。
-
連接到ZooKeeper:如果ZooKeeper作為HA環(huán)境下的主節(jié)點,那么NameNode會連接到ZooKeeper,否則它將自己指定為主節(jié)點。
-
啟動RPC服務:NameNode作為HDFS的核心組件之一,它需要提供RPC服務用于遠程客戶端操作文件系統(tǒng)。因此,在啟動時,NameNode會啟動RPC服務,并綁定到默認端口9000。
-
初始化內(nèi)存數(shù)據(jù)結(jié)構:NameNode會初始化內(nèi)存數(shù)據(jù)結(jié)構來存儲文件系統(tǒng)的映像,包括命名空間樹、所有數(shù)據(jù)塊的ID列表和塊到Datanode的映射等。
-
注冊Datanode:在NameNode啟動后,Datanode需要向它注冊以便被識別。NameNode會監(jiān)聽其管理端口50010,接收來自Datanode的注冊請求。
-
初始化SafeMode:如果在上一次停機時文件系統(tǒng)處于SafeMode模式下,那么在啟動NameNode時它會重現(xiàn)該狀態(tài)。此時,進入安全模式的原因和狀態(tài)信息會被記錄在命名空間映像中。
-
啟動后臺線程:NameNode還需要啟動許多后臺線程,用于監(jiān)控數(shù)據(jù)節(jié)點的健康狀況、處理客戶端請求以及清理
Namenode在首次啟動時的工作流程
-
格式化文件系統(tǒng):為了啟動Hadoop文件系統(tǒng),我們需要首先進行格式化以生成文件系統(tǒng)元數(shù)據(jù)。這一步會創(chuàng)建默認配置和目錄結(jié)構并生成一個名為 fsimage 的映像文件。
-
啟動NameNode:一旦文件系統(tǒng)格式被初始化,就可以啟動NameNode進程。NameNode會從fsimage文件中加載文件系統(tǒng)元數(shù)據(jù)到內(nèi)存中,同時它需要等待DataNode注冊并發(fā)送塊報告。
-
啟動DataNode:一旦DataNode節(jié)點開始運行,它會向NameNode注冊,并將塊報告與NameNode交互。之后,NameNode將比較fsimage中記錄的塊數(shù)是否與block report中的總塊數(shù)相同。
-
對文件系統(tǒng)進行操作:最后,對文件系統(tǒng)進行操作,例如創(chuàng)建新目錄、上傳文件、刪除文件等更改文件系統(tǒng)狀態(tài)的操作。每次文件系統(tǒng)上發(fā)生更改,都需要將其更新到內(nèi)存中的元數(shù)據(jù)信息中,并在edits日志文件中記錄更改的信息以實現(xiàn)持久性,以保證元數(shù)據(jù)信息的可靠性。因此,以上所述工作流程說明namenode在啟動時做的事情。
Namenode非首次啟動時的工作流程
在非首次啟動時,Namenode的工作流程與首次啟動時類似。然而,由于此時已經(jīng)存在edits日志和fsimage文件,因此有些步驟會有所不同,并且Namenode需要執(zhí)行一些額外的操作來恢復前一次運行期間未完成處理的編輯日志。
-
啟動NameNode:
- Namdenode讀取fsimage文件并將其加載到內(nèi)存中。
- 然后Namenode讀取上次運行期間未完成的編輯日志(即edits文件)并將其合并到內(nèi)存中的元數(shù)據(jù)樹。
-
等待DataNode的注冊:一旦Namenode完成第1步,則等待DataNode節(jié)點注冊并發(fā)送塊報告流程開始。
-
版本和命名空間檢查:接下來,Namenode會進行版本和命名空間檢查以確保文件系統(tǒng)的有效性和完整性。
-
運行BlockReport:一旦版本檢查成功,Namendoe將運行BlockReport過程,該過程涉及向所有DataNode節(jié)點請求它們管理的block列表,并標記可能失效的block。
-
對文件系統(tǒng)進行操作:最后,可以對文件系統(tǒng)進行任何更改。每次發(fā)生更改時,隨著內(nèi)存中元數(shù)據(jù)信息的更新,Namenode會記錄更改的信息到edits日志文件中,以實現(xiàn)持久性并保證元數(shù)據(jù)信息的可靠性。
總之,當Namenode在非首次啟動時,它會從fsimage文件中恢復文件系統(tǒng)狀態(tài),然后將編輯日志與其合并。此后,進行命名空間和版本檢查,接著進行塊報告處理,并等待對文件系統(tǒng)做出更改。
Secondary NameNode
Secondary NameNode是什么
Secondary NameNode是Apache Hadoop分布式計算框架中的一個組件,它的主要作用是協(xié)助NameNode元數(shù)據(jù)操作。
在Hadoop集群中,NameNode是至關重要的組件,它負責管理整個分布式文件系統(tǒng)(HDFS)的命名空間和訪問控制。但是,由于NameNode必須承擔大量任務,例如客戶端讀寫請求、數(shù)據(jù)塊定位以及心跳檢查等,這將導致其負載劇增并影響其性能。
為了解決這個問題,Hadoop引入了Secondary NameNode,在內(nèi)存中定期備份和合并NameNode的元數(shù)據(jù),并將其寫入本地磁盤中,而不會對NameNode的進程進行任何干擾或負擔。
如果發(fā)生NameNode某些故障,Secondary NameNode可以與本地磁盤中存儲的元數(shù)據(jù)一起,幫助恢復NameNode。雖然它不能完全代替NameNode,但是它提供了一種低成本高效的方式來實現(xiàn)NameNode元數(shù)據(jù)的冗余和快速恢復,從而提高整個集群的可靠性和穩(wěn)定性。
Secondary NameNode工作機制
Secondary NameNode是HDFS(Hadoop分布式文件系統(tǒng))中的一個組件,主要負責幫助NameNode完成某些管理操作,以提高HDFS的可靠性和效率。
工作機制
-
Secondary NameNode會定期從NameNode獲取checkpoint數(shù)據(jù)。Checkpoint是NameNode關于文件系統(tǒng)狀態(tài)的一個快照,包括了所有塊的元數(shù)據(jù)信息,例如塊大小、位置等。這些信息存放在
fsimage
和edits
兩個文件中。 fsimage文件包含了當前文件系統(tǒng)的元數(shù)據(jù)信息,而edits文件則包含了自上一個checkpoint之后的命名空間操作(例如:創(chuàng)建文件、刪除文件等)。 -
Secondary NameNode將這些文件合并成一個新的fsimage文件,并將edits日志清空。這個新的fsimage文件被稱為“checkpoint”。
-
Secondary NameNode通過HTTP將新生成的checkpoint發(fā)送給NameNode。
-
當NameNode接收到這個checkpoint時,它會加載這個新的fsimage文件,然后對其中的edits日志進行重放,以恢復從上次checkpoint以來所有的修改。這樣,NameNode的內(nèi)部數(shù)據(jù)結(jié)構就能夠與Secondary NameNode保持同步。
通過這種機制,Secondary NameNode維護了一個較小的fsimage和edits日志來加速HDFS集群的恢復速度和故障恢復能力,在NameNode崩潰時提供備份數(shù)據(jù),同時減少NameNode服務器的壓力,在大規(guī)模HDFS集群中發(fā)揮著重要作用。
Secondary NameNode 不能恢復 NameNode 的全部數(shù)據(jù),那如何保證NameNode 數(shù)據(jù)存儲安全
NameNode 數(shù)據(jù)存儲的安全主要依賴于兩個方面:備份和故障轉(zhuǎn)移。
一方面,在 Hadoop 集群中,通常會設置多個 NameNode 實例以提高數(shù)據(jù)存儲的可靠性和可用性。這些不同的 NameNode 可能是通過“活動”和“備用”角色輪番交替來發(fā)揮作用。在適當配置了 ZooKeeper 或者其他類似的工具時,如果某一個 NameNode 發(fā)生故障或宕機,則可以自動地將所有的讀寫請求轉(zhuǎn)移到另一個健康的 NameNode 上,從而保證整個集群的正常運行。同時,對于數(shù)據(jù)存儲本身也可以進行備份操作。例如,通過使用 HDFS 的快照(Snapshot)功能,可以及時地創(chuàng)建和管理文件系統(tǒng)狀態(tài)的備份。這些備份可以存儲在不同的位置或者不同的媒介上,以實現(xiàn)更加穩(wěn)定的數(shù)據(jù)存儲。文章來源:http://www.zghlxwxcb.cn/news/detail-507919.html
另一方面,HDFS 還支持異地備份,通過在遠程地帶備份數(shù)據(jù),即使本地數(shù)據(jù)丟失,也可以恢復數(shù)據(jù)。如果有公有云或私有云的存儲服務商合作,你也可以把HDFS的數(shù)據(jù)異地備份到公有云或私有云的對象存儲上,保證本地故障的數(shù)據(jù)恢復速度更加迅速和更長遠地存儲的安全性。文章來源地址http://www.zghlxwxcb.cn/news/detail-507919.html
到了這里,關于HDFS組織架構及相關介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!