1. 程式人生 > >三、Hadoop的架構:存儲層(Hadoop分布式文件系統) HDFS

三、Hadoop的架構:存儲層(Hadoop分布式文件系統) HDFS

失效 主動 計算機 聯網 分布式文件系統 eight alt 部分 計算

存儲層(Hadoop分布式文件系統) HDFS

一、分布式文件系統
  多臺計算機聯網協同工作(有時也稱為一個集群)就像單臺系統一樣解決某種問題,這樣的系統我們稱之為分布式系統。
  分布式文件系統是分布式系統的一個子集,它們解決的問題就是數據存儲。換句話說,它們是橫跨在多臺計算機上的存儲系統。存儲在分布式文件系統上的數據自動分布在不同的節點上。
  在傳統的文件系統裏,因為文件系統不會跨越多臺機器,元數據和數據存儲在同一臺機器上。為了構建一個分布式文件系統,讓客戶端在這種系統中使用簡單,並且不需要知道其他客戶端的活動,那麽元數據需要在客戶端以外維護。HDFS的設計理念是拿出一臺或多臺機器來保存元數據,並讓剩下的機器來保存文件的內容。


二、重要組成為分離元數據和數據:NameNode和DataNode


  元數據包括了文件名、i節點(inode)數、數據塊位置等,存儲到文件系統中的每個文件都有相關聯的元數據。
  數據則是文件的實際內容。



三、組成
技術分享圖片


上圖中展現了整個HDFS三個重要角色: NameNode、DataNode和Client。
1、NameNode是HDFS的主要組件之一。元數據存儲在NameNode上, NameNode不僅要管理存儲在HDFS上內容的元數據,而且要記錄一些事情,比如哪些節點是集群的一部分,某個文件有幾份副本等。它還要決定當集群的節點宕機或者數據副本丟失的時候系統需要做什麽。在本質上,NameNode是HDFS的Master(主服務器),DataNode是Slave(從服務器)


2、DataNode是HDFS的主要組件之一。數據存儲在DataNode的集群上。在本質上,NameNode是HDFS的Master(主服務器),DataNode是Slave(從服務器)
3、Client就是需要獲取分布式文件系統文件的應用程序。
1.文件寫入:
1.Client向NameNode發起文件寫入的請求。
2.NameNode根據文件大小和文件塊配置情況,返回給Client它所管理部分DataNode的信息。
3.Client將文件劃分為多個Block,根據DataNode的地址信息,按順序寫入到每一個DataNode塊中。

2.文件讀取:
1.Client向NameNode發起文件讀取的請求。
2.NameNode返回文件存儲的DataNode的信息。
3.Client讀取文件信息。

3.文件Block復制:
1.NameNode發現部分文件的Block不符合最小復制數或者部分DataNode失效。
2.通知DataNode相互復制Block。
3.DataNode開始直接相互復制。



註:

1、HDFS寫過程
NameNode負責管理存儲在HDFS上所有文件的元數據,它會確認客戶端的請求,並記錄下文件的名字和存儲這個文件的DataNode集合。它把該信息存儲在內存中的文件分配表裏。
例如,客戶端發送一個請求給NameNode,說它要將“zhou.log”文件寫入到HDFS。那麽,其執行流程如圖1所示。具體為:
第一步:客戶端發消息給NameNode,說要將“zhou.log”文件寫入。(如圖1中的①)第二步:NameNode發消息給客戶端,叫客戶端寫到DataNode A、B和D,並直接聯系DataNode B。(如圖1中的②)
第三步:客戶端發消息給DataNode B,叫它保存一份“zhou.log”文件,並且發送一份副本給DataNode A和DataNode D。(如圖1中的③)
第四步:DataNode B發消息給DataNode A,叫它保存一份“zhou.log”文件,並且發送一份副本給DataNode D。(如圖1中的④)
第五步:DataNode A發消息給DataNode D,叫它保存一份“zhou.log”文件。(如圖1中的⑤)
第六步:DataNode D發確認消息給DataNode A。(如圖1中的⑤)
第七步:DataNode A發確認消息給DataNode B。(如圖1中的④)
第八步:DataNode B發確認消息給客戶端,表示寫入完成。(如圖1中的⑥)
技術分享圖片
在分布式文件系統的設計中,挑戰之一是如何確保數據的一致性。對於HDFS來說,直到所有要保存數據的DataNodes確認它們都有文件的副本 時,數據才被認為寫入完成。因此,數據一致性是在寫的階段完成的。一個客戶端無論選擇從哪個DataNode讀取,都將得到相同的數據。


2、HDFS讀過程
為了理解讀的過程,可以認為一個文件是由存儲在DataNode上的數據塊組成的。
客戶端查看之前寫入的內容的執行流程如圖2所示,具體步驟為:
第一步:客戶端詢問NameNode它應該從哪裏讀取文件。(如圖2中的①)
第二步:NameNode發送數據塊的信息給客戶端。(數據塊信息包含了保存著文件副本的DataNode的IP地址,以及DataNode在本地硬盤查找數據塊所需要的數據塊ID。) (如圖2中的②)
第三步:客戶端檢查數據塊信息,聯系相關的DataNode,請求數據塊。(如圖2中的③)
第四步:DataNode返回文件內容給客戶端,然後關閉連接,完成讀操作。(如圖2中的④)
技術分享圖片
客戶端並行從不同的DataNode中獲取一個文件的數據塊,然後聯結這些數據塊,拼成完整的文件。


3、通過副本快速恢復硬件故障
  當一切運行正常時,DataNode會周期性發送心跳信息給NameNode(默認是每3秒鐘一次)。如果NameNode在預定的時間內沒有收到 心跳信息(默認是10分鐘),它會認為DataNode出問題了,把它從集群中移除,並且啟動一個進程去恢復數據。DataNode可能因為多種原因脫離 集群,如硬件故障、主板故障、電源老化和網絡故障等。
  對於HDFS來說,丟失一個DataNode意味著丟失了存儲在它的硬盤上的數據塊的副本。假如在任意時間總有超過一個副本存在(默認3個),故障 將不會導致數據丟失。當一個硬盤故障時,HDFS會檢測到存儲在該硬盤的數據塊的副本數量低於要求,然後主動創建需要的副本,以達到滿副本數狀態。





















三、Hadoop的架構:存儲層(Hadoop分布式文件系統) HDFS