HDFS(Hadoop Distributed File System)是一種HadoopDistributed File System,具備高度容錯特性,支援高輸送量資料訪問,可以在處理海量資料(TB或PB層級以上)的同時最大可能的降低成本。HDFS適用於大規模資料的分布式讀寫,特別是讀多寫少的情境。
特性
E-MapReduce叢集中HDFS的優勢如下:
具有高容錯性和高可擴充性。
提供Shell命令介面。
提供Web可視化組件管理介面,方便管理。
擁有類似於Linux的檔案許可權管理。
Locality感知,在分配儲存空間時會考慮計算節點的位置。
當DataNode之間資料不平衡時,可以進行Rebalance操作。
支援滾動重啟和升級操作。
架構
HDFS是經典的Master和Slave架構,每一個HDFS叢集包括一個NameNode和多個DataNode。
NameNode管理所有檔案的中繼資料資訊,並且負責與用戶端互動。DataNode負責管理儲存在該節點上的檔案。每一個上傳到HDFS的檔案都會被劃分為一個或多個資料區塊,這些資料區塊根據HDFS叢集的資料備份策略被分配到不同的DataNode上,位置資訊交由NameNode統一管理。
基本概念
名稱 | 描述 |
NameNode | 用於管理檔案系統的命名空間、維護檔案系統的目錄結構樹以及中繼資料資訊,記錄寫入的每個資料區塊(Block)與其歸屬檔案的對應關係。 此資訊以命名空間鏡像(FSImage)和編輯日誌(EditsLog)兩種形式持久化在本地磁碟中。 |
DataNode | DataNode是檔案的實際存放位置。 DataNode會根據NameNode或Client的指令來儲存或者提供資料區塊,並且定期地向NameNode彙報該DataNode儲存的資料區塊資訊。 |
Client | 通過Client來訪問檔案系統,然後由Client與NameNode和DataNode進行通訊。Client對外作為檔案系統的介面,類似於POSIX。 |
Blocks | HDFS將檔案拆分成128 MB大小的資料區塊進行儲存,這些Block可能儲存在不同的節點上。HDFS可以儲存更大的單個檔案,甚至超過任何一個磁碟所能容納的大小。一個Block預設儲存3個副本(EMR Core節點如果使用雲端硬碟,則為2副本),以Block為粒度將副本儲存在多個節點上。此方式不僅提高了資料的安全性,而且對於分布式作業可以更好地利用本地的資料進行計算,減少網路傳輸。 |
Secondary NameNode | 對於非高可用叢集,預設會啟動一個Secondary NameNode進程。Secondary NameNode的作用是消費EditsLog,週期性合并FsImage和EditsLog,產生新的FsImage檔案,降低了NameNode的壓力。 |
高可用 | 對於高可用叢集,預設會啟動兩個NameNode,一個是Active NameNode,另一個是Standby NameNode,兩個NameNode承擔不同角色。 Active NameNode負責處理DataNode和Client的請求,Standby NameNode跟Active NameNode一樣擁有最新的中繼資料資訊,隨時準備在Active NameNode出現異常時接管其服務。如果Active NameNode異常,Standby NameNode會感知到並切換成Active NameNode的角色處理DataNode和Client請求。 |