HDFS架構設計
HDFS是一個具有高度容錯性的分布式文件系統,適合部署在廉價的機器上,它具有以下幾個特點:
1)適合存儲非常大的文件
2)適合流式數據讀取,即適合“只寫一次,讀多次”的數據處理模式
3)適合部署在廉價的機器上
但HDFS不適合以下場景(任何東西都要分兩面看,只有適合自己業務的技術才是真正的好技術):
1)不適合存儲大量的小文件,因為受Namenode內存大小限制
2)不適合實時數據讀取,高吞吐量和實時性是相悖的,HDFS選擇前者
3)不適合需要經常修改數據的場景
HDFS的架構如上圖所示,總體上采用了Master/Slave的架構,主要有以下4個部分組成:
1、Client
2、NameNode
整個HDFS集群只有一個NameNode,它存儲整個集群文件分別的元數據信息。這些信息以fsimage和editlog兩個文件存儲在本地磁盤,Client通過這些元數據信息可以找到相應的文件。此外,NameNode還負責監控DataNode的健康情況,一旦發現DataNode異常,就將其踢出,并拷貝其上數據至其它DataNode。
3、Secondary NameNode
Secondary NameNode負責定期合并NameNode的fsimage和editlog。這里特別注意,它不是NameNode的熱備,所以NameNode依然是Single Point of Failure。它存在的主要目的是為了分擔一部分NameNode的工作(特別是消耗內存的工作,因為內存資源對NameNode來說非常珍貴)。
4、DataNode
DataNode負責數據的實際存儲。當一個文件上傳至HDFS集群時,它以Block為基本單位分布在各個DataNode中,同時,為了保證數據的可靠性,每個Block會同時寫入多個DataNode中(默認為3)