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
如此迴圈下去