當前位置:編程學習大全網 - 源碼下載 - hadoop fsimage損壞怎麽恢復

hadoop fsimage損壞怎麽恢復

解決辦法

報錯位置在源碼中的方法為org.apache.hadoop.hdfs.server.namenode.FSEditLog.loadFSEdits(EditLogInputStream edits)方法中讀取文件最後位置時因為缺少部分數據報錯, 所以把這部分代碼單獨拿出來,去掉業務操作部分,只留讀取過程,記錄異常之前的文件長度len,然後將0到len 這部分的內容復制出來成新的edits文件。啟動hadoop集群,成功!

NameNode啟動加載元數據情景分析

NameNode函數裏調用FSNamesystemm讀取dfs.namenode.name.dir和dfs.namenode.edits.dir構建FSDirectory。

FSImage類recoverTransitionRead和saveNameSpace分別實現了元數據的檢查、加載、內存合並和元數據的持久化存儲。

saveNameSpace將元數據寫入到磁盤,具體操作步驟:首先將current目錄重命名為lastcheckpoint.tmp;然後在創建新的current目錄,並保存文件;最後將lastcheckpoint.tmp重命名為privios.checkpoint.

checkPoint的過程:Secondary NameNode會通知nameNode產生壹個edit log文件edits.new,之後所有的日誌操作寫入到edits.new文件中。接下來Secondary NameNode會從namenode下載fsimage和edits文件,進行合並產生新的fsimage.ckpt;然後Secondary會將fsimage.ckpt文件上傳到namenode。最後namenode會重命名fsimage.ckpt為fsimage,edtis.new為edits;

PS:

最新的CDH版本的hadoop 集群啟動可以對edits文件進行recover操作,跳過報錯log

  • 上一篇:茶葉商城開題報告
  • 下一篇:MACD指標的重要性表現
  • copyright 2024編程學習大全網