1. 程式人生 > >hadoop hdfs分散式檔案系統工作原理

hadoop hdfs分散式檔案系統工作原理

非HA下的namenode 工作原理

nameNode的作用:1.管理元資料 2.維護目錄樹 3.響應客戶請求(主要就是記錄一些 真實資料存放在 被切割後 放在了 哪些機器上,等客戶端下載時  找到這些檔案塊 在合併返回給客戶端)

1.當客戶端沒請求一次時  nameNode都要記錄這次請求記錄 在給客戶端響應

nameNode的元資料是非常龐大的,還要保證效率,怎麼做的?

解決方案1.可以使用readis快取資料庫,還可以持久化,但是 hadoop不想依賴太多第三方的東西 想自己做

方案2:自己將 資料 儲存在磁碟上(fsImage)如果沒操作一次 就將資料 放入fsImage中,fsImage非常大,又是放在磁碟上,非常消耗效能,

還是可以將可以利用readis快取資料庫 定時網fsImage中存放

PS:nameNode不支援多執行緒

說了不想引入第三方東西太多 。

3.他使用了日誌的方式存放   新建一個edits.log 的檔案  edits.log檔案預設大小是64M,超過64M,就將其改名為edits.log.1  這樣edits.log就沒有了 ,就會新建

edits.log是追加的(append only) (檔案追加效率還是很高的)不斷追加客戶端的操作記錄

4.在什麼時候合併呢?怎麼合併的

預設合併時間是 3600秒 

如果就在本機上合併,fsimage資料太大,合併和耗時間,這樣響應客戶端的請求就會慢

hadoop啟動的時候 預設給我們啟動了一個  secondary namenode 

使用secondaryNameNode 程序做合併處理

5.secondary nameNode 首先 將fsImage和多個edits日誌檔案下載到本地

6.載入到記憶體進行合併處理

7.給NameNode傳送一個通知,讓他別忘edits.log檔案中寫入資料,改為網editsNew中寫資料

8.生成合並之後的fsimage 命名為fsImage.checkpoint

9.nameNode下載合併後的fsimage.checkpoint

10.nameNode將fsiamge.checkpoint改為 fsimage 替換老的fsimage

11.將editsNew給我edits.log 

如此迴圈下去