hadoop(5)--NameNode後設資料管理(2)

weixin_34236869發表於2018-04-09

上次分享了寫資料的過程,那麼有個問題:NameNode是怎麼處理高併發的客戶端的請求的,NameNode響應為什麼這麼快?

帶著問題思考:①,如果資料放到記憶體中,那麼當斷電的時候,資料就沒有辦法恢復了,這一種肯定不是hdfs儲存資料,更不是NameNode儲存後設資料的策略

②,如果寫入硬碟,那怎麼可能響應快呢,這一種也pass

③,記憶體+硬碟【redis叢集資料也是這樣的,在分散式的檔案系統中這種思想是相通的】

那麼,畫一個圖來說明記憶體+硬碟的這種儲存策略


11278345-77a0ca4575037c4b.png

1,向NameNode申請寫資源

2,NameNode將資料暫時記錄到edits log中

3,NameNode返回可用的DataNode

4,客戶端向DataNode寫入檔案

5,客戶端通知NameNode已經寫完了

6,NameNode將之間記錄到edits log中的資料同步到記憶體中

這裡已經結束了,但是edits log如果滿了怎麼辦呢?

接下下就是NameNode的同步資料的問題,要保證在斷電的時候,資料可以完整的恢復?

當edits log檔案滿了【64M】或者是間隔3600秒,也就是1個小時,(這兩個引數都是可以配置的),就會進行合併,就是將edits log中的資料,追加到fsimage檔案之後,【這裡其實是產生了新的檔案,暫時可以理解為追加】,並把edits log中的資料清除。

這樣即使斷電可以一通過fsimage+edits log進行恢復,正常情況客戶端讀取的是記憶體中的資料,所以快,這就是高併發,響應支援的原因。

那麼NameNode是怎麼做到高可用的呢?這個問題留著明天分享,早早休息

望指正,不吝賜教!

相關文章