1.分佈式文件系統(Distributed File System)
由來:數據量越來越多,在一個操作系統管轄的範圍存不下了,那麼就分配到更多的操作系統管理的磁盤中,但是不方便管理和維護,因此迫切需要一種系統來管理多臺機器上的文件,這就是分佈式文件管理系統 。
定義:是一種允許文件通過網絡在多臺主機上分享的文件系統,可讓多機器上的多用戶分享文件和存儲空間。
特點:通透性,讓實際上是通過網絡來訪問文件的動作,由程序與用戶看來,就像是訪問本地的磁盤一般。
容錯,即使系統中有某些節點脫機,整體來說系統仍然可以持續運作而不會有數據損失。
應用:分佈式文件管理系統很多,hdfs只是其中一種。適用於一次寫入多次查詢的情況,不支持併發寫情況,小文小文件不合適。
2.常見的分佈式文件系統
常見的分佈式文件系統有,GFS、HDFS、Lustre 、Ceph 、GridFS 、mogileFS、TFS、FastDFS等。各自適用於不同的領域。它們都不是系統級的分佈式文件系統,而是應用級的分佈式文件存儲服務。
3.HDFS簡介
› 源於Google論文GFS
› 一種分佈式文件系統
› 塊式存儲
› 文件數據由一次性寫入或追加寫入,不可更改
› 讀取時可以多個塊併發讀取
› Master-Slave結構:一個NameNode + 若干DataNode組成
4.NameNode和DataNode
NameNode:Master,只有一個節點;管理HDFS的名字空間(NameSpace),記錄文件怎樣分成數據塊Blocks,數據塊存儲在哪些節點上,整個分佈式文件系統的狀態
DataNode:Slaves,可有多個節點,向NameNode發送心跳彙報block狀況,執行讀/寫操作,執行NameNode 的副本策略
5.NameNode
5.1 NameNode相關的文件包括
> fsimage:元數據鏡像文件。存儲某一時段NameNode內存元數據信息。
>edits:操作日誌文件。
>fstime:保存最近一次checkpoint的時間
注:以上這些文件是保存在linux的文件系統中
5.2 NameNode的職責
› 維護樹狀目錄結構(NameSpace)
› 分配並記錄每個文件由哪些塊組成,以及每個塊的信息(大小、時間戳等)
› 將HDFS的文件和目錄元數據存儲在一個叫fsimage的文件中,每次保存fsimage之後到下次保存之間的所有hdfs操作,將會記錄在editlog文件中
› 被動接受DataNode的HeartBeat,記錄DataNode的Block信息
› 通過HeartBeat的迴應向DataNode發送命令,本身不做重量級得工作
6.SecondaryNameNode(僞分佈式)
6.1 SecondaryNameNode初認識
簡介:HA的一個解決方案。但不支持熱備。配置即可。Hadoop會維護一個fsimage文件,也就是namenode中metedata的鏡像,但是fsimage不會隨時與namenode內存中的metedata保持一致,而是每隔一段時間通過合併edits文件來更新內容。Secondary namenode就是用來合併fsimage和edits文件來更新NameNode的metedata的。
執行過程:從NameNode上下載元數據信息(fsimage,edits),然後把二者合併,生成新的fsimage,在本地保存,並將其推送到NameNode,替換舊的fsimage.
注意:默認安 裝在NameNode節點上,但這樣不安全!
6.2 SecondaryNameNode工作流程詳解
NameNode SecondaryNameNode
①secondary namenode通知namenode切換edits文件
②secondary namenode從namenode獲得fsimage和edits(通過http)
③secondary namenode將fsimage載入內存,然後開始合併edits
④secondary namenode將新的fsimage發回給namenode
⑤namenode用新的fsimage替換舊的fsimage
?什麼時候checkpiont
fs.checkpoint.period 指定兩次checkpoint的最大時間間隔,默認3600秒。
fs.checkpoint.size 規定edits文件的最大值,一旦超過這個值則強制checkpoint,不管是否到達最大時間間隔。默認大小是64M。
7.DataNode
7.1 DataNode相關概念
職責:提供真實文件數據的存儲服務。
文件塊(block):最基本的存儲單位。對於文件內容而言,一個文件的長度大小是size,那麼從文件的0偏移開始,按照固定的大小,順序對文件進行劃分並編號,劃分好 的每一個塊稱一個Block。HDFS默認Block大小是128MB,以一個256MB文件,共有256/128=2個Block.
不同於普通文件系統的是,HDFS中,如果一個文件小於一個數據塊的大小,並不佔用整個數據塊存儲空間
Replication。多複本。默認是三個。
7.2 DataNode職責詳解
› 維護數據塊:一個塊是一個本地文件
› 處理數據的寫入、讀取、塊的複製、刪除操作等
› 可以配置多個磁盤
› 允許部分磁盤失敗
› 根據剩餘空間比例選擇新block的存放位置
› 定期向NameNode通報自身的block列表
8.HDFS架構圖