2021年大数据Hadoop(十一):HDFS的元数据辅助管理
?2021大數據領域優質創作博客,帶你從入門到精通,該博客每天更新,逐漸完善大數據各個知識體系的文章,幫助大家更高效學習。
有對大數據感興趣的可以關注微信公眾號:三幫大數據
目錄
HDFS的元數據輔助管理
一、FsImage和Edits
二、SecondaryNameNode的作用
三、SecondaryNameNode喚醒合并的規則
四、SecondaryNameNode工作過程
五、fsimage 中的文件信息查看
六、edits中的文件信息查看
七、NameNode元數據恢復
HDFS的元數據輔助管理
當 Hadoop 的集群當中, NameNode的所有元數據信息都保存在了 FsImage 與 Eidts 文件當中, 這兩個文件就記錄了所有的數據的元數據信息, 元數據信息的保存目錄配置在了 hdfs-site.xml?當中
<property><name>dfs.namenode.name.dir</name>?? ?<value>file:///export/servers/hadoop2.7.5/hadoopDatas/namenodeDatas</value></property><property><name>dfs.namenode.edits.dir</name><value>file:///export/servers/hadoop-2.7.5/hadoopDatas/nn/edits</value></property>>
一、FsImage和Edits
edits:
edits?是在NameNode啟動時對整個文件系統的快照存放了客戶端最近一段時間的操作日志
客戶端對 HDFS 進行寫文件時會首先被記錄在?edits?文件中
edits?修改時元數據也會更新
fsimage:
fsimage是在NameNode啟動時對整個文件系統的快照
NameNode 中關于元數據的鏡像, 一般稱為檢查點, fsimage?存放了一份比較完整的元數據信息
因為?fsimage?是 NameNode 的完整的鏡像, 如果每次都加載到內存生成樹狀拓撲結構,這是非常耗內存和CPU, 所以一般開始時對 NameNode 的操作都放在 edits 中
隨著edits?內容增大, 就需要在一定時間點和 fsimage?合并
二、SecondaryNameNode的作用
SecondaryNameNode的作用是合并fsimage和edits文件。
NameNode的存儲目錄樹的信息,而目錄樹的信息則存放在fsimage文件中,當NameNode啟動的時候會首先讀取整個fsimage文件,將信息裝載到內存中。
Edits文件存儲日志信息,在NameNode上所有對目錄的最新操作,增加,刪除,修改等都會保存到edits文件中,并不會同步到fsimage中,當NameNode關閉的時候,也不會將fsimage和edits進行合并。
所以當NameNode啟動的時候,首先裝載fsimage文件,然后按照edits中的記錄執行一遍所有記錄的操作,最后把信息的目錄樹寫入fsimage中,并刪掉edits文件,重新啟用新的edits文件。
但是如果NameNode執行了很多操作的話,就會導致edits文件會很大,那么在下一次啟動的過程中,就會導致NameNode的啟動速度很慢,慢到幾個小時也不是不可能,所以出現了SecondNameNode。
三、SecondaryNameNode喚醒合并的規則
SecondaryNameNode 會按照一定的規則被喚醒,進行fsimage和edits的合并,防止文件過大。
合并的過程是,將NameNode的fsimage和edits下載到SecondryNameNode 所在的節點的數據目錄,然后合并到fsimage文件,最后上傳到NameNode節點。合并的過程中不影響NameNode節點的操作
SecondaryNameNode被喚醒的條件可以在core-site.xml中配置:
fs.checkpoint.period:單位秒,默認值3600(1小時),檢查點的間隔時間,當距離上次檢查點執行超過該時間后啟動檢查點
fs.checkpoint.size:單位字節,默認值67108864(64M),當edits文件超過該大小后,啟動檢查點
[core-site.xml]
<!-- 多久記錄一次 HDFS 鏡像, 默認 1小時 --><property><name>fs.checkpoint.period</name><value>3600</value></property><!-- 一次記錄多大, 默認 64M --><property><name>fs.checkpoint.size</name><value>67108864</value></property>
SecondaryNameNode一般處于休眠狀態,當兩個檢查點滿足一個,即喚醒SecondaryNameNode執行合并過程。?
四、SecondaryNameNode工作過程
第一步:將hdfs更新記錄寫入一個新的文件——edits.new。
第二步:將fsimage和editlog通過http協議發送至secondary namenode。
第三步:將fsimage與editlog合并,生成一個新的文件——fsimage.ckpt。這步之所以要在secondary namenode中進行,是因為比較耗時,如果在namenode中進行,或導致整個系統卡頓。
第四步:將生成的fsimage.ckpt通過http協議發送至namenode。
第五步:重命名fsimage.ckpt為fsimage,edits.new為edits。
第六步:等待下一次checkpoint觸發SecondaryNameNode進行工作,一直這樣循環操作。
注意:SecondaryNameNode 在合并 edits 和 fsimage 時需要消耗的內存和 NameNode 差不多, 所以一般把 NameNode 和 SecondaryNameNode 放在不同的機器上
五、fsimage 中的文件信息查看
使用命令 hdfs oiv
cd?/export/server/hadoop-2.7.5/hadoopDatas/namenodeDatas/currenthdfs oiv -i fsimage_0000000000000000138 -p XML -o hello.xml
六、edits中的文件信息查看
使用命令 hdfs oev
cd?/export/server/hadoop-2.7.5/hadoopDatas/nn/edits/currenthdfs oev -i ?edits_0000000000000000865-0000000000000000866 -p XML -o myedit.xml
七、NameNode元數據恢復
當NameNode發生故障時,我們可以通過將SecondaryNameNode中數據拷貝到NameNode存儲數據的目錄的方式來恢復NameNode的數據
操作步驟:
1、殺死NameNode進程
kill?-9?NameNode進程號
2、刪除NameNode存儲的數據
rm?/export/server/hadoop-2.7.5/hadoopDatas/namenodeDatas/*?-fr
3、在node2主機上,拷貝SecondaryNameNode中數據到原NameNode存儲數據目錄
cd ?/export/server/hadoop-2.7.5/hadoopDatas/snn/name/
scp -r current/ ?node1:/export/server/hadoop-2.7.5/hadoopDatas/namenodeDatas
4、重新啟動NameNode
hadoop-daemon.sh start namenode
- 📢博客主頁:https://lansonli.blog.csdn.net
- 📢歡迎點贊 👍 收藏 ?留言 📝 如有錯誤敬請指正!
- 📢本文由 Lansonli 原創,首發于 CSDN博客🙉
- 📢大數據系列文章會每天更新,停下休息的時候不要忘了別人還在奔跑,希望大家抓緊時間學習,全力奔赴更美好的生活?
總結
以上是生活随笔為你收集整理的2021年大数据Hadoop(十一):HDFS的元数据辅助管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021年大数据Hadoop(十):HD
- 下一篇: 2021年大数据Hadoop(十二):H