【報資訊】hadoop中namenode職責和hdfs讀寫

2023-01-08 11:31:35 來源:51CTO博客

1、namenode職責:


【資料圖】

1.1、管理各個datanode節點

1.2、管理分布式文件系統的元數據信息

比如 一個文件多大,文件名,文件被切成幾塊,每個文件塊存到哪臺datanode服務上

1.3、通過RPC心跳機制來監控datanode的狀態。對于網絡通信,http主外,rpc主內

1.4、為了確保數據存儲的可靠性,采用冗余機制來實現,注意:副本數量不宜過多,因為會降低整個集群的磁盤利用率,一般采用3副本策略,

?

2、hdfs讀寫過程

2.1從HDFS上下載文件過程

①、Client向namenode發起Open file請求。目的是獲取指定文件的輸入流。

namenode收入請求之后,會檢查路徑 的合法性,此外,還會檢查客戶端的操作權限。如果檢測未通過,則直接報錯返回,后續過程不會發生

②、Client也會向namenode發起GetBlockLocation請求,獲取指定文件的元數據信息。如果第一步的檢測通過,namenode會將元數據信息封裝到輸入流里,返回給客戶端。

③、客戶端根據元數據信息,直接去對應的datanode讀取文件塊,然后下載到本地(或創建 本地的輸出流,然后做流的對接)

④、讀完后,關流

2.2往HDFS上寫文件過程

①、Client向namenode發起Create File請求,目的是獲取HDFS文件的輸出流,namenode收到請求后,會檢測路徑 的合法性和權限,如果檢測未通過,直接報錯返回。

如果通過檢測,namenode會將文件的切塊信息(比如文件被切成幾塊,每個文件塊的副本存在哪臺datanode上),然后把這些信息封裝到輸出流里,返回給客戶端。

所以注意:文件塊的輸出(上傳)是客戶端直接和對應datanode交互的,namenode的作用是告訴Client文件塊要發送給哪個datanode上。

②、Client通過輸出流,發送文件塊(底層會將一個文件塊打散成一個一個的packet,每個packet的大小為64kb)。這個過程的機制,叫Pipeline(數據流管理機制), 這種機制的目的在于充分利用每臺機器的帶寬,避免網絡瓶頸和高延時的連接,最小化推送所有數據的延時

③、通過數據流管道機制,實現數據的發送和副本的復制。每臺datanode服務器收到數據之后,會向上流反饋ack確認機制,直到第五步的ack發送給Client之后,再發送下一個packet。依次循環,直到所有數據都復制完成。此外,在底層傳輸的過程中,會用到全雙工通信

④、數據上傳完成之后,關流

2.3從HDFS上刪除文件的流程

①、客戶端賂namenode發現刪除文件指令,比如:hadoop fs -rm /park01/1.txt

②、namenode收到請求后,會檢查路徑 的合法性及權限

③、如果檢測通過,會將對應的文件從元數據中刪除。(注意:此時這個文件并沒有真正從集群上被刪除)

④、每臺datanode會定期向namenode發送心跳,會領取刪除的指令,批到對應的文件塊,進行文件塊的刪除

標簽: 刪除文件 這個文件 不宜過多

上一篇:環球快報:【Redis技術探索】「數據遷移實戰」手把手教你如何實現在線 + 離線模式進行遷移Redis數據實戰指南(離線同步數據)
下一篇:最新資訊:ELK給Kibana加上登錄權限控制