hadoop-hdfs體系結構


HDFS作為Hadoop的核心技術之一,HDFS(Hadoop Distributed File System, Hadoop分布式文件系統)是分布式計算中數據存儲管理的基礎。具有高容錯高可靠性、高可擴展性、高可獲得性、高吞吐率等特性。為超大數據集的應用提供了便利。

一、設計的前提和目的

HDFS是Google的GFS(Google File System)的開源實現。具有以下五個基本目標:

  1. 硬件錯誤是常態而不是錯誤。HDFS一般運行在普通的硬件上,所以硬件錯誤是一種很正常的情況。所以在HDFS中,錯誤的檢測並快速自動恢復是HDFS的最核心的設計目標。
  2. 流式數據訪問。運行在HDFS上的應用主要是以批量處理為主,而不是用戶交互式事務,以流式數據讀取為多。
  3. 大規模數據集。HDFS中典型的文件大小要達到GB或者是TB級。
  4. 簡單一致性原則。HDFS的應用程序一般對文件的操作時一次寫入、多次讀出的模式。文件一經創建、寫入、關閉后,一般文件內容再發生改變。這種簡單的一致性原則,使高吞吐量的數據訪問成為可能。
  5. 數據就近原則。HDFS提供接口,以便應用程序將自身的執行代碼移動到數據節點上來執行。采用這種方式的原因主要是:移動計算比移動數據更加划算。相比與HDFS中的大數據/大文件,移動計算的代碼相比與移動數據更加划算,采用這種方式可以提供寬帶的利用率,增加系統吞吐量,減少網絡的堵塞程度。

 

二、HDFS體系結構

HDFS是一個主從結構(master/slave)。如圖所示:

從這個圖,我們可以看到HDFS中,主要由兩類節點組成,一種是NameNode(NN),一種是DataNode(DN)。

NameNode是主控制服務器,負責管理HDFS文件系統的命名空間,記錄文件數據庫在每個DataNode節點上的位置和副本信息,協調客戶端(Client)對文件的訪問/操作,以及記錄命名空間內的改動或命名空間本身屬性的改變。

DataNode是數據存儲節點,負責自身所在物理節點上的存儲管理。HDFS中文件存儲是按塊(Block)存儲的,默認大小是64MB。

客戶端操作數據,只通過NameNode獲取DataNode節點的物理位置,對於寫/讀數據的具體操作,NameNode是不會參與的,全部由DataNode負責。

由於HDFS中只有一個NameNode節點,所有存在單點問題,即如果改NameNode節點宕機,那么HDFS就會出現問題,數據可能丟失。解決辦法是啟動一個SecondaryNameNode或者將NameNode數據寫出到其它遠程文件系統中。

 

三、HDFS可靠性保障措施

HDFS的主要設計目標之一是在故障情況下,要保障數據存儲的可靠性。HDFS具備了完善的冗余備份和故障恢復機制。一般通過dfs.replication設置備份份數,默認3。

  1. 冗余備份。將數據寫入到多個DataNode節點上,當其中某些節點宕機后,還可以從其他節點獲取數據並復制到其他節點,使備份數達到設置值。dfs.replication設置備份數。
  2. 副本存放。HDFS采用機架感知(Rack-aware)的策略來改進數據的可靠性、可用性和網絡寬帶的利用率。當復制因子為3時,HDFS的副本存放策略是:第一個副本放到同一機架的另一個節點(執行在集群中)/隨機一個節點(執行在集群外)。第二個副本放到本地機架的其他任意節點。第三個副本放在其他機架的任意節點。這種策略可以防止整個機架失效時的數據丟失,也可以充分利用到機架內的高寬帶特效。
  3. 心跳檢測。NameNode會周期性的從集群中的每一個DataNode上接收心跳包和塊報告,NameNode根據這些報告驗證映射和其他文件系統元數據。當NameNode沒法接收到DataNode節點的心跳報告后,NameNode會將該DataNode標記為宕機,NameNode不會再給該DataNode節點發送任何IO操作。同時DataNode的宕機也可能導致數據的復制。一般引發重新復制副本有多重原因:DataNode不可用、數據副本損壞、DataNode上的磁盤錯誤或者復制因子增大。
  4. 安全模式。在HDFS系統的時候,會先經過一個完全模式,在這個模式中,是不允許數據塊的寫操作。NameNode會檢測DataNode上的數據塊副本數沒有達到最小副本數,那么就會進入完全模式,並開始副本的復制,只有當副本數大於最小副本數的時候,那么會自動的離開安全模式。DataNode節點有效比例:dfs.safemode.threshold.pct(默認0.999f),所以說當DataNode節點丟失達到1-0.999f后,會進入安全模式。
  5. 數據完整性檢測。HDFS實現了對HDFS文件內容的校驗和檢測(CRC循環校驗碼),在寫入數據文件的時候,也會將數據塊的校驗和寫入到一個隱藏文件中()。當客戶端獲取文件后,它會檢查從DataNode節點獲取的數據庫對應的校驗和是否和隱藏文件中的校驗和一致,如果不一致,那么客戶端就會認為該數據庫有損壞,將從其他DataNode節點上獲取數據塊,並報告NameNode節點該DataNode節點的數據塊信息。
  6. 回收站。HDFS中刪除的文件先會保存到一個文件夾中(/trash),方便數據的恢復。當刪除的時間超過設置的時間閥后(默認6小時),HDFS會將數據塊徹底刪除。
  7. 映像文件和事務日志。這兩種數據是HDFS中的核心數據結構。
  8. 快照。不太清楚。。。呵呵

 

四、HDFS命令

  1. bin/hadoop dfs -ls:命令和linux中的ls命令差不多,都是列出文件。
  2. bin/hadoop dfs -put src dest:上傳文件到HDFS中。
  3. bin/hadoop dfs -get src dest:復制HDFS文件到本地系統中。
  4. bin/hadoop dfs -rmr path:刪除文件。
  5. bin/hadoop dfs -cat in/*:查看文件內容。
  6. bin/hadoop dfsadmin -report:查看HDFS的基本統計信息,和訪問http://fs4:50070一樣。
  7. bin/hadoop dfsadmin -safemode  enter/leave/get/wait:操作安全模式。
  8. bin/start-dfs.sh:在新節點執行,可以添加hdfs新節點。
  9. bin/start-balancer.sh:負載均衡。

 


免責聲明!

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



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