當數據集的大小超過一臺獨立物理計算機的存儲能力時,就有必要對它進行分區 (partition)并存儲到若干臺單獨的計算機上。管理網絡中跨多臺計算機存儲的文件系統成為分布式文件系統 (Distributed filesystem)。該系統架構于網絡之上,勢必會引入網絡編程的復雜性,因此分布式文件系統比普通磁盤文件系統更為復雜。
1.介紹
需要跨機器存儲,統一管理分布在集群上的文件系統統稱為分布式文件系統。 Hodoop使用HDFS(Hadoop Distributed File System)作文存儲系統。HDFS使用多臺計算機存儲文件,對外提供統一操作文件的接口。
2.應用場景 適合的場景
a.存儲非常大的文件并且對延時沒有要求 。
b.彩球流式的數據訪問方式,即一次寫入,多次讀取。數據集經常從數據源生成或者拷貝,然后做很多分析工作。
c.對硬件要求不高 。
d.高容錯 。
e.可拓展。
不適合的場景
a.對延時有要求。
b.大量小文件。每個文件都需要對應一條元數據,元數據存儲在NameNode的內存中 。
c.多方讀寫。不支持文件任意offset的修改。不支持多個寫入器。
3.HDFS的架構
HDFS是一個主/從體系結構。 HDFS由四部分組成,HDFS Client,站群服務器,NameNode,DataNode和Secondary NameNode。
Client:客戶端 。
a.文件切分,文件上傳HDFS的時候,將文件切分成一個一個的數據塊(Block)進行存儲 。
b.與NameNode交互,獲取文件的位置 。
c.與DataNode交互,讀取或寫入數據 。
NameNode: HDFS系統中的master,是主管 。
a.管理HDFS的名稱空間 。
b.管理數據塊(block)的映射信息 。
c.管理副本策略 。
d.處理客戶端請求 。
DataNode: 就是Slave 。
a.存儲實際的數據塊 。
b.執行數據庫的讀/寫操作 。
Secondary NameNode: 并非NameNode的熱備,不能代替Namenode 。
a.輔助NameNode,分擔其工作 。
b.當NameNode掛掉時,美國站群服務器,輔助它復活。
4.NameNode和DataNode
4.1.NameNode作用
NameNode在內存中保存著整個文件系統的名稱空間和文件數據塊的地址映射。 整個HDFS可存儲的文件數量受限于NameNode的內存大小。
1)NameNode元數據信息:文件名,文件目錄結構,文件屬性以及每個文件的塊列表。以及列表中的塊與塊所在的DataNode的之間的地址映射關系。這些數據會定時持久化到磁盤中。
2)NameNode文件操作:NameNode負責文件元數據的操作,DataNode負責處理文件內容的讀寫,數據流不經過NameNode。
3)NameNode副本:文件數據塊到底存放到哪里DataNode上,是由NameNode依據全局情況做出放置副本的決定。
4)NameNode心跳機制: NameNode會周期性的來自DataNode的狀態信息報告。如果10分鐘內接受不到DN的心跳,NN則會認為它宕機。
4.2 DataNode的作用
1)DN以數據塊的形式存儲文件 。
2)DN響應Client的讀寫請求 。
3)DN周期性的向NN發送心跳信息 。
4)DN周期性的向NN匯報數據塊信息/緩存數據塊信息。
5.HDFS的副本機制和機架感知 5.1 HDFS文件副本機制
所有的文件都是以block塊的方式存放在HDFS文件系統中,作用如下:
5.1.一個文件可能大于整個磁盤容量,引入塊機制可以很好地解決這個問題。
5.2.使用塊作為文件存儲的邏輯單位可以簡化存儲子系統。
5.3.易于備份提高容災能力,在hadoop2中,block的默認大小為128M,可以在hdfs-site.xml配置文件中修改。每個block的默認副本數為3,也可以在這個配置文件中改。
dfs.replication3dfs.block.size1342177285.2 機架感知
機架可以理解為存放一組主機的柜子,機架感知是HDFS的系統中有一個副本存放的策略。