一、HDFS概述
1.1HDFS產生背景
隨着數據量越來越大,在一個操作系統管轄的範圍內存不下了,那麼就分配到更多的操作系統管理的磁盤中,但是不方便管理和維護,迫切需要一種系統來管理多臺機器上的文件,這就是分佈式文件管理系統。HDFS只是分佈式文件管理系統中的一種。
1.2HDFS的概念
HDFS,它是一個文件系統,用於存儲文件,通過目錄樹來定位文件;其次,它是分佈式的,由很多服務器聯合起來實現其功能,集羣中的服務器有各自的角色。
HDFS的設計適合一次寫入,多次讀出的場景,且不支持文件的修改。適合用來做數據分析,並不適合用來做網盤應用。
1.3HDFS優缺點
優點
高容錯性
(1)數據自動保存多個副本。它通過增加副本的形式,提高容錯性。
(2)某一個副本丟失以後,它可以自動恢復。
適合大數據處理
(1)數據規模:能夠處理數據規模達到 GB、TB、甚至PB級別的數據。
(2)文件規模:能夠處理百萬規模以上的文件數量,數量相當之大。
流式數據訪問
(1)一次寫入,多次讀取,不能修改,只能追加。
(2)它能保證數據的一致性。
可構建在廉價機器上,通過多副本機制,提高可靠性。
缺點
不適合低延時數據訪問,比如毫秒級的存儲數據,是做不到的。
無法高效的對大量小文件進行存儲
(1)存儲大量小文件的話,它會佔用 NameNode大量的內存來存儲文件、目錄和塊信息。這樣是不可取的,因爲NameNode的內存總是有限的。
(2)小文件存儲的尋道時間會超過讀取時間,它違反了HDFS的設計目標。
併發寫入、文件隨機修改
(1)一個文件只能有一個寫,不允許多個線程同時寫。
(2)僅支持數據 append(追加),不支持文件的隨機修改。
1.4 HDFS架構
HDFS架構圖
Client:就是客戶端。
- 文件切分。文件上傳 HDFS 的時候,Client 將文件切分成一個一個的Block,然後進行存儲。
- 與NameNode交互,獲取文件的位置信息。
- 與DataNode交互,讀取或者寫入數據。
- Client提供一些命令來管理HDFS,比如啓動或者關閉HDFS。
- Client可以通過一些命令來訪問HDFS。
NameNode:就是master,它是一個主管、管理者。
- 管理HDFS的名稱空間
- 管理數據塊(Block)映射信息
- 配置副本策略
- 處理客戶端讀寫請求
DataNode:就是Slave。NameNode下達命令,DataNode執行實際的操作。
- 存儲實際的數據塊
執行數據塊的讀\寫
Secondary NameNode:並非NameNode的熱備。當NameNode掛掉的時候,它並不能馬上替換NameNode並提供服務。
輔助NameNode,分擔其工作量
- 定期合併Fsimage和Edits,並推送給NameNode
- 在緊急情況下,可輔助恢復NameNode
1.4HDFS文件塊大小
HDFS中的文件在物理上是分塊存儲(block),塊的大小可以通過配置參數( dfs.blocksize)來規定,默認大小在hadoop2.x版本中是128M,老版本中是64M。
HDFS的塊比磁盤的塊大,其目的是爲了最小化尋址開銷。如果塊設置得足夠大,從磁盤傳輸數據的時間會明顯大於定位這個塊開始位置所需的時間。因而,傳輸一個由多個塊組成的文件的時間取決於磁盤傳輸速率。
如果尋址時間約爲10ms,而傳輸速率爲100MB/s,爲了使尋址時間僅佔傳輸時間的1%,我們要將塊大小設置約爲100MB。默認的塊大小128MB。
塊的大小:10ms*100*100M/s = 100M