1.1 HDFS產生的背景
隨着數據量越來越大,在一個操作系統存不下所有的數據,那么就分配到更多的操作系統管理的磁盤中,但是不方便管理和維護,迫切需要一種系統來管理多台機器上的文件,這就是分布式文件管理系統。HDFS只是分布式文件管理系統中的一種。
1.2 HDFS的定義
HDFS(Hadoop Distributed File System),它是一個文件系統,用於存儲文件,通過目錄樹來定位文件;其次,它是分布式的,由很多服務器聯合起來實現其功能,集群中的服務器有各自的角色。
HDFS的使用場景:適合一次寫入,多次讀出的場景,且不支持文件的修改。適合用來做數據分析,並不適合用來做網盤應用。
2. HDFS的優缺點
2.1 優點:
1). 高容錯性
(1)數據自動保存多個副本,它通過增加數據副本的樣式,提高容錯性
(2)某一個數據副本丟失以后,它可以自動恢復
(1)數據規模:能夠處理規模達到GB、TB、甚至PB的級的大數據 ;
3) 可構建在廉價機器上,通過多副本機制,提高可靠性。
2.2 缺點
1)不適合低時延的數據訪問;
2)無法高效的對大量小文件進行存儲:
(1)存儲大量小文件的話,它會占用NameNode大量的內存來存儲文件的目錄和塊信息;
(2)小文件的存儲的尋址時間超過了讀取時間,違反了HDFS的設計目標。
3)不支持並發的寫入、文件隨機修改
(1)一個文件只能有一個寫,不允許多個線程同時寫;
(2)僅支持數據的append(追加),不支持文件的隨機修改
3. HDFS的組成架構
3.1 整體架構圖如下:
3.2 HDFS架構詳解
1)NameNode(簡稱:ND):就是master,它是一個主管人員,負責管理HDFS的相關信息:
(1)管理HDFS的名稱空間;
(2)管理副本的策略;
(3)管理數據塊(Block)的映射信息;
(4)處理客戶端的讀寫請求。
2)DataNode(簡稱:DN):就是slave,NameNode下達指令,DataNode執行實際的操作:
(1)存儲實際的數據塊;
(2)執行數據塊的讀/寫操作。
3)Client:客戶端,與NameNode交互的程序,職責或功能如下:
(1)文件切分:在上傳文件至HDFS的時候,Client會將文件分切成一個個的Block上傳;
(2)與NameNode交互,可以獲取文件的位置信息(存在哪個節點上)
(3)Client可以通過一些命令來訪問HDFS,比如增刪改查操作;
(4)Client通過一些命令來管理HDFS,比如將NameNode格式化。
4)SecondaryNameNode:並非是NameNode的熱備。當NameNode掛掉的時候,它並不會立即替換NameNode並提供服務。
(1)輔助NameNode,分擔其工作量,比如定期合並FsImage和Edits(后邊會講到,這里不用理解),並將合並后的FsImage.checkPoint推送給NameNode;
(2)在緊急情況下可以輔助恢復NameNode。
4 HDFS的文件塊大小
1)HDFS中的文件在物理上是按照塊(Block)存儲的,塊id大小可以通過配置參數(dfs.blocksize)來規定,默認大小在Hadoop2.x的版本中是128M,老版本的是64M。
2)塊的大小設定:文件的尋址時間應為塊文件的傳輸時間的1%,這是比較合理的設定。
3)思考:為什么塊的大小不能設置太小,也不能設置太大?
(1)HDFS的塊如果設置的太小,會增加尋址時間,程序長時間在尋找塊的存儲位置;
(2)如果設置太大,從磁盤傳輸的時間會明顯大於定位這個塊的起始位置所需的時間。導致在處理這個塊的數據時,浪費了大量的時間在IO上。
因此,塊的大小可以根據數據量和磁盤的IO速度決定如何設置。
5. 簡單粗暴的總結:
-
-
把一份文件存在一台機器上不安全怎么辦?搞多台機器存多個副本,一個節點掛了,其他節點上的還能用;
-
要存的文件太大讀寫慢怎么辦?把文件切成塊存儲,每塊的默認大小是128MB;
-
那么多台機器怎么管理呢?定義存數據的機器就是DataNode,管理這些個DataNode的機器就是NameNode(它記錄了文件存儲的位置、文件的元數據以及使喚DataNode做存取操作)。