一 、hdfs體系架構
1.NameNode------>管理節點------>hdfs中老大
(1)維護着整個文件系統的文件目錄樹;
(2)維護元數據信息;
(3)接收用戶的操作請求
2.DataNode------>提供真實文件數據的存儲服務------>hdfs中小弟
將文件進行劃分並編號,切分成n個Block,HDFS默認Block大小是128MB
3.Secondary NameNode(僞分佈式,hadoop1.0用)------>保持文件系統最新的元數據------>hdfs中祕書
合併NameNode的edit logs到fsimage文件中
二 、元數據存儲細節
元數據存儲在內存中,舉個例子,現在要存儲一個文件a.log
/test/a.log是一個要存儲的文件,要存儲3個副本(防止一個機器掛掉,文件丟失,所以需要副本),文件被切分成2塊,叫做
blk_1和blk_2,blk1存放在h0,h1,h2三臺機器上,blk2存放在h0,h2,h4三臺機器上
三 、NameNode工作原理
1. 基本概念
fsimage:元數據鏡像文件。存儲某一時段NameNode內存元數據信息。
edits:操作日誌文件。
fstime:保存最近一次checkpoint的時間
2.工作原理
1.客戶端Client向NameNode發出要寫文件的請求,告訴NameNode我要開始寫文件了
2.NameNode向edis log文件中記錄元數據操作日誌
3.NameNode返回信息給客戶端Client,告訴客戶端可以寫文件操作了
4.客戶端Client開始向DataNode中寫數據
5.客戶端Client通知NameNode寫文件成功了
6.NameNode將新產生的元數據信息更新到內存中,並向edis log中寫消息(即使機器斷電,信息仍會保存到edis log中)
四 、SecondNameNode原理
Hadoop會維護一個fsimage文件,也就是namenode中metedata的鏡像,但是fsimage不會實時與namenode內存中的metedata保持一致,而是每隔一段時間通過合併edits文件來更新內容。Secondary namenode就是用來合併fsimage和edits文件來更新NameNode的metedata的。
1.NameNode通知SecondNameNode進行checkpoindt操作
2.SecondNameNode收到消息,停止向edis log中寫入信息
3.NameNode中生成一個新的edis log
4.原有的edis log 和fsimage下載到SecondNameNode中
5.SecondNameNode將原有的edis log 和fsimage進行合併,產生一塊新的fsimage
6.新產生的fsimage上傳給NameNode,取代舊的fsimage