namenode始終在內存中保存metedata(整個文件系統的目錄結構,每個目錄有哪些文件,每個文件有哪些分塊及每個分塊保存在哪個DataNode上),用于處理“讀請求”(不需要修改內容)
到有“寫請求”到來時,namenode會首先對metedata修改的內容寫editlog到磁盤(每一次改變都會同步到磁盤。),成功返回后,才會修改內存,并且向客戶端返回??蛻舳嗽趯憯祿矫總€datanode中。namenode在將metadata寫到editlog的時候會同步到磁盤。
Hadoop會維護一個fsimage文件,也就是namenode中metedata的鏡像,但是fsimage不會隨時與namenode內存中的metedata保持一致(因為非常大),而是每隔一段時間通過合并editlog來更新內容。Secondary namenode就是用來更新fsimage的
secondary namenode的工作流程
1.Secondary通知primary切換editlog(目的合并editlog)
2.Secondary從primary獲得fsimage和editlog(通過http)
3.Secondary將fsimage載入內存,然后開始合并editlog
4.Secondary將新的fsimage發回給primary
5.Primary用新的fsimage替換舊的fsimage
什么時候checkpiont?
fs.checkpoint.period 指定兩次checkpoint的最大時間間隔,默認3600秒。
fs.checkpoint.size 規定edits文件的最大值,一旦超過這個值則強制checkpoint,不管是否到達最大時間間隔。默認大小是64M。
新聞熱點
疑難解答
圖片精選