HDFS
HDFS(Hadoop Distributed File System)是一種Hadoop分布式文件系統(tǒng),具備高度容錯特性,支持高吞吐量數(shù)據(jù)訪問,可以在處理海量數(shù)據(jù)(TB或PB級別以上)的同時最大可能的降低成本。HDFS適用于大規(guī)模數(shù)據(jù)的分布式讀寫,特別是讀多寫少的場景。
特性
E-MapReduce集群中HDFS的優(yōu)勢如下:
具有高容錯性和高可擴展性。
提供Shell命令接口。
提供Web可視化組件管理界面,方便管理。
擁有類似于Linux的文件權(quán)限管理。
Locality感知,在分配存儲空間時會考慮計算節(jié)點的位置。
當DataNode之間數(shù)據(jù)不平衡時,可以進行Rebalance操作。
支持滾動重啟和升級操作。
架構(gòu)
HDFS是經(jīng)典的Master和Slave架構(gòu),每一個HDFS集群包括一個NameNode和多個DataNode。
NameNode管理所有文件的元數(shù)據(jù)信息,并且負責與客戶端交互。DataNode負責管理存儲在該節(jié)點上的文件。每一個上傳到HDFS的文件都會被劃分為一個或多個數(shù)據(jù)塊,這些數(shù)據(jù)塊根據(jù)HDFS集群的數(shù)據(jù)備份策略被分配到不同的DataNode上,位置信息交由NameNode統(tǒng)一管理。
基本概念
名稱 | 描述 |
NameNode | 用于管理文件系統(tǒng)的命名空間、維護文件系統(tǒng)的目錄結(jié)構(gòu)樹以及元數(shù)據(jù)信息,記錄寫入的每個數(shù)據(jù)塊(Block)與其歸屬文件的對應關(guān)系。 此信息以命名空間鏡像(FSImage)和編輯日志(EditsLog)兩種形式持久化在本地磁盤中。 |
DataNode | DataNode是文件的實際存放位置。 DataNode會根據(jù)NameNode或Client的指令來存儲或者提供數(shù)據(jù)塊,并且定期地向NameNode匯報該DataNode存儲的數(shù)據(jù)塊信息。 |
Client | 通過Client來訪問文件系統(tǒng),然后由Client與NameNode和DataNode進行通信。Client對外作為文件系統(tǒng)的接口,類似于POSIX。 |
Blocks | HDFS將文件拆分成128 MB大小的數(shù)據(jù)塊進行存儲,這些Block可能存儲在不同的節(jié)點上。HDFS可以存儲更大的單個文件,甚至超過任何一個磁盤所能容納的大小。一個Block默認存儲3個副本(EMR Core節(jié)點如果使用云盤,則為2副本),以Block為粒度將副本存儲在多個節(jié)點上。此方式不僅提高了數(shù)據(jù)的安全性,而且對于分布式作業(yè)可以更好地利用本地的數(shù)據(jù)進行計算,減少網(wǎng)絡(luò)傳輸。 |
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一樣擁有最新的元數(shù)據(jù)信息,隨時準備在Active NameNode出現(xiàn)異常時接管其服務(wù)。如果Active NameNode異常,Standby NameNode會感知到并切換成Active NameNode的角色處理DataNode和Client請求。 |