隨着數據量愈來愈大,在一個操做系統管轄的範圍內存不下了,那麼就分配到更多的操做系統管理的磁盤中,可是不方便管理和維護,迫切須要一種系統來管理多臺機器上的文件,這就是分佈式文件管理系統。HDFS
只是分佈式文件管理系統中的一種。node
HDFS
,它是一個文件系統,用於存儲文件,經過目錄樹來定位文件;其次,它是分佈式的,由不少服務器聯合起來實現其功能,集羣中的服務器有各自的角色。HDFS
的設計適合一次寫入,屢次讀出的場景,且不支持文件的修改。適合用來作數據分析,並不適合用來作網盤應用。緩存
這種架構主要由四個部分組成,分別爲HDFS Client、NameNode、DataNode和Secondary NameNode。
下面咱們分別介紹這四個組成部分。
複製代碼
HDFS
的時候,Client將文件切分紅一個一個的Block
,而後進行存儲。NameNode
交互,獲取文件的位置信息。DataNode
交互,讀取或者寫入數據。HDFS
,好比啓動或者關閉HDFS。HDFS
。就是master,它是一個主管、管理者
複製代碼
HDFS
的名稱空間。Block
映射信息就是Slave,NameNode下達命令,DataNode執行實際的操做
複製代碼
並不是NameNode的熱備,當NameNode掛掉的時候,它並不能立刻替換NameNode並提供服務
複製代碼
NameNode
,分擔其工做量。Fsimage
和Edits
,並推送給NameNode
。NameNode
。HDFS中的文件在物理上是分塊存儲(block),塊的大小能夠經過配置參數( dfs.blocksize)來規定,
默認大小在hadoop2.x版本中是128M,老版本中是64M。
HDFS的塊比磁盤的塊大,其目的是爲了最小化尋址開銷。若是塊設置得足夠大,從磁盤傳輸數據的時間會明顯大於定位
這個塊開始位置所需的時間,於是,傳輸一個由多個塊組成的文件的時間取決於磁盤傳輸速率。
若是尋址時間約爲10ms,而傳輸速率爲100MB/s,爲了使尋址時間僅佔傳輸時間的1%,
咱們要將塊大小設置約爲100MB。默認的塊大小128MB。塊的大小:10ms*100*100M/s = 100M
複製代碼
Distributed FileSystem
模塊向namenode
請求上傳文件,namenode
檢查目標文件是否已存在,父目錄是否存在。namenode
返回是否能夠上傳。block
上傳到哪幾個datanode
服務器上。namenode
返回3個datanode
節點,分別爲dn一、dn二、dn3
。FSDataOutputStream
模塊請求dn1
上傳數據,dn1
收到請求會繼續調用dn2
,而後dn2
調用dn3
,將這個通訊管道創建完成。dn1
、dn2
、dn3
逐級應答客戶端。dn1
上傳第一個block
(先從磁盤讀取數據放到一個本地內存緩存),以packet
爲單位,dn1
收到一個packe
t就會傳給dn2
,dn2
傳給dn3
;dn1
每傳一個packet
會放入一個應答隊列等待應答。block
傳輸完成以後,客戶端再次請求namenode
上傳第二個block
的服務器。(重複執行3-7步)Distributed FileSystem
向namenode
請求下載文件,namenode
經過查詢元數據,找到文件塊所在的datanode
地址。datanode
(就近原則,而後隨機)服務器,請求讀取數據。datanode
開始傳輸數據給客戶端(從磁盤裏面讀取數據輸入流,以packet
爲單位來作校驗)。packet
爲單位接收,先在本地緩存,而後寫入目標文件。namenode
格式化後,建立fsimage
和edits
文件。若是不是第一次啓動,直接加載編輯日誌和鏡像文件到內存。namenode
記錄操做日誌,更新滾動日誌。namenode
在內存中對數據進行增刪改查。Secondary NameNode
詢問namenode
是否須要checkpoint
。直接帶回namenode
是否檢查結果。Secondary NameNode
請求執行checkpoint
。namenode
滾動正在寫的edits
日誌。Secondary NameNode
。Secondary NameNode
加載編輯日誌和鏡像文件到內存,併合並。fsimage.chkpoint
。fsimage.chkpoint
到namenode
。namenode
將fsimage.chkpoint
從新命名成fsimage
。namenode
被格式化以後,將在/opt/module/hadoop-2.7.2/data/tmp/dfs/name/current
目錄中產生以下文件:安全
edits_0000000000000000000
fsimage_0000000000000000000.md5
seen_txid
VERSION
複製代碼
Fsimage
文件:HDFS
文件系統元數據的一個永久性的檢查點,其中包含HDFS
文件系統的全部目錄和文件idnode
的序列化信息。Edits
文件:存放HDFS
文件系統的全部更新操做的路徑,文件系統客戶端執行的全部寫操做首先會被記錄到edits
文件中。seen_txid
文件保存的是一個數字,就是最後一個edits_
的數字Namenode
啓動的時候都會將fsimage
文件讀入內存,並從00001
開始到seen_txid
中記錄的數字依次執行每一個dits
裏面的更新操做,保證內存中的元數據信息是最新的、同步的,能夠當作Namenode
啓動的時候就將fsimage
和edits
文件進行了合併。datanode
上以文件形式存儲在磁盤上,包括兩個文件,一個是數據自己,一個是元數據包括數據塊的長度,塊數據的校驗和,以及時間戳。DataNode
啓動後向namenode
註冊,經過後,週期性(1小時)的向namenode
上報全部的塊信息。namenode
給該datanode
的命令如複製塊數據到另外一臺機器,或刪除某個數據塊。若是超過10分鐘沒有收到某個datanode
的心跳,則認爲該節點不可用。