
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發送心跳,會領取刪除的指令,批到對應的文件塊,進行文件塊的刪除