HDFS節點詳解


HDFS設計思想來源於Google三大論文之一的GFS

設計思想


 

  • 分而治之:將大文件、大批量文件,分布式放在大量服務器上,以便於采取分而治之的方式對海量數據進行預算分析;
  • 在大數據系統中的作用:為各類分布式運算框架(如:MapReduce,Spark等)提供數據存儲服務
  • 重要概念:文件切塊,副本存放,元數據

 

HDFS架構

  

 

 

 

HDFS各節點

 


 

  •   NameNode是HDFS的主節點,負責元數據的管理以及客戶端對文件的訪問。管理數據塊的復制,它周期性地從集群中的每個DataNode接收心跳信號和塊狀態報告(Blockreport)
  •   DataNode是HDFS的從節點,負責具體數據的讀寫,數據的存儲。

 

    DataNode啟動時向NameNode注冊,通過后,周期性(1小時)的向NameNode上報告所有塊信息。心跳是每三秒一次,心跳返回結果帶有NameNode給該DataNode的命令(如復制塊數據到另一台服務器,或刪除某個數據塊。如果超過十分鍾沒有收到某個DataNode的心跳,則認為該節點不可用。

  • SecondaryNameNode:負責元數據的同步
  • Client(客戶端): 負責數據讀寫請求的發起

 

 

文件:

 


 

  •   HDFS中的文件是分塊存儲(block),塊的大小可以通過配置參數(dfs.blocksize)來規定,默認大小在Hadoop2.X版本中是128M,老版本是64M,,每個塊有多個副本存儲在不同的機器上,副本數可在文件生成時指定(默認3)
  •   NameNode 負責文件元數據的操作,DataNode負責處理文件內容的讀寫請求。
  • 數據塊在DataNode以文件存儲在磁盤上,包括兩個文件,一個是數據本身,一個是元數據(包括數據塊的長度,快數據的效驗以及時間戳)
  •   數據塊存放在哪些DataNode上由 NameNode來控制,根據全局情況做出塊放置決定,讀取文件時NameNode盡量讓用戶先讀取最近的副本,降低帶塊消耗和讀取時延。
  •   數據塊損壞處理:當DataNode讀取塊的時候,它會計算checksum,如果計算后的checksum與block創建時值不一樣,說明該block已損壞,則認為該節點不可用,客戶端會讀取其它DataNode上的block,NameNode標記該block已經損壞,然后復制其他節點的block達到預期設置的文件備份數(默認每個塊存儲三份,存儲在不同的DataNode節點上)。DataNode在其文件創建三周后驗證其checksum。

 

 

NameNode啟動過程:簡述

 


 

  1. 加載fsimage和edits文件,生成新的fsimage和一個空的edits文件
  2. 等待DataNode注冊和發送心跳
  3. DataNode啟動,向NameNode注冊,發送心跳報告、塊報告
  4. NameNode離開安全模式。

 

 

NameNode啟動過程:詳解

 


 

  1. Name啟動的時候首先將fsimage(鏡像)載入內存,並執行(replay)編輯日志editlog的的各項操作;
  2. 一旦在內存中建立文件系統元數據映射,則創建一個新的fsimage文件(這個過程不需 SecondaryNameNode) 和一個空的editlog;
  3. 在安全模式下,各個datanode會向namenode發送塊列表的最新情況;
  4. 此刻namenode運行在安全模式。即NameNode的文件系統對於客服端來說是只讀的。(顯示目錄,顯示文 件內容等。寫、刪除、重命名都會失敗);
  5. NameNode開始監聽RPC和HTTP請求
  6. 解釋RPC:RPC(Remote Procedure Call Protocol)——遠程過程通過協議,它是一種通過網絡從遠程計算機程序 上請求服務,而不需要了解底層網絡技術的協議;
  7. 系統中數據塊的位置並不是由namenode維護的,而是以塊列表形式存儲在datanode中;
  8. 在系統的正常操作期間,namenode會在內存中保留所有塊信息的映射信息。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM