HDFS 架構
HDFS 涉及兩個重要進程:NameNode、DataNode。
他們一般都部署單獨部署在不同服務器上,運行 NameNode 的服務器是主服務器,運行 DataNode 的服務器是從服務器。主服務器只有一個,從服務器有多個。
這種一主多從的架構基本適用于所有分布式系統或框架。可重復使用的架構方案叫作架構模式,一主多從可謂是大數據領域的最主要的架構模式。主服務器只有一臺,掌控全局。從服務器有很多臺,負責具體的事情。這樣很多臺服務器可以有效組織起來,對外表現出一個統一又強大的存儲計算能力。
- DataNode
DataNode 負責文件數據的存儲和讀寫操作,HDFS 將文件數據分割成若干數據塊(Block),每個 DataNode 存儲一部分數據塊,這樣文件就分布存儲在整個 HDFS 服務器集群中。應用程序客戶端(Client)可以并行對這些數據塊進行訪問,從而使得 HDFS 可以在服務器集群規模上實現數據并行訪問,極大地提高了訪問速度。
這里的并行訪問貌似只存在于不同文件之間,同一文件的數據塊是同步訪問。
在實踐中,HDFS 集群的 DataNode 服務器會有很多臺,一般在幾百臺到幾千臺這樣的規模,每臺服務器配有數塊磁盤,整個集群的存儲容量大概在幾 PB 到數百 PB。
- NameNode
NameNode 負責整個分布式文件系統的元數據(MetaData)管理,也就是文件路徑名、數據塊的 ID 以及存儲位置等信息,相當于操作系統中文件分配表(FAT)的角色。HDFS 為了保證數據的高可用,會將一個數據塊復制為多份(默認3份),并將多份相同的數據塊存儲在不同的機架的服務器上。這樣當有磁盤損壞,或者某個 DataNode 服務器宕機,甚至某個交換機宕機時,系統能通過其備份的數據塊進行查找。
數據塊越多,占用其內存越多。
處理客戶端的請求。
客戶端:與HDFS 打交道,寫入或讀取 HDFS 上的文件的程序。
剖析文件上傳
客戶端向 HDFS 上傳文件。
剖析文件讀取
客戶端向 HDFS 讀取文件。
剖析NameNode與SecondaryNameNode之間的配合
HDFS 的一些配置項
問題
Zookeeper 如何在HDFS使用的
像 NameNode 這樣主從服務器管理同一份數據的場景,如果從服務器錯誤地以為主服務器宕機而接管集群管理,會出現主從服務器一起對 DataNode 發送指令,進而導致集群混亂,也就是所謂的“腦裂”。這也是這類場景選舉主服務器時,引入 ZooKeeper 的原因。