HDFS數據塊損壞是如何處理的?

HDFS數據塊損壞是如何處理的?

數據塊損壞恢復流程

在namenode中對於進行數據塊副本的管理都是在FSnameSystem中,其中有一個成員變量 corruptReplicats
,其中就存儲着損壞數據與DataNode的映射,當某個數據塊損壞後(DataNode可以通過數據塊掃描器獲知,通過心跳發送給namenode),namenode會將損壞的數據塊加到corrupReplicats中,當損壞的數據塊在DataNode上刪除後會在corrutpReplicatS中也刪除。
當部分副本出現損壞時,namenode進行數據塊複製時,有一個數據結構叫做underReplicatedBlocks對象,其中就有list保存需要進行數據塊複製的數據塊,對於數據塊複製是有優先級的,underReplicatedBlocks的getPriority()會返回數據塊的優先級,等待複製的對象從underReplicatsBlocks中讀取出來之後會生成複製請求,並將請求放入FSnameSystem.pendingReplications中。pendlingReplication是一個數據塊到數據塊複製信息pendingBlockInfo的映射,pendlingReplication保存了數據塊複製的時間和複製副本數,如果複製沒成功會被重新插入到underReplicatedBlocks對象中,重新產生複製請求。

數據塊損壞自動恢復相關參數

hdfs當然會自動修復損壞的數據塊,當數據塊損壞後,DN節點執⾏directoryscan之前,都不會發現損壞,也就是directoryscan操作校驗是默認間隔6h
dfs.datanode.directoryscan.interval : 21600

在DN向NN進⾏blockreport前,都不會恢復數據塊;也就是blockreport操作是間隔6h
dfs.blockreport.intervalMsec : 21600000

數據塊損壞手動恢復方式:

hdfs fsck / #先檢查哪些數據塊丟失了
hdfs debug recoverLease -path 文件位置 -retries 重試次數 # 修復指定路徑的hdfs文件,可以嘗試多次

搜索公衆號 guowei   ,關注更多大數據知識

 

發佈了77 篇原創文章 · 獲贊 34 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章