- 目錄
- 前言:
- 1、NameNode的工作機制
- 2、DataNode的工作機制
- 3、Secondary Namenode的Check point機制
目錄
前言:
在說明checkpoint機制之前,先要了解下namenode、datanode的一些功能和職責。
1、NameNode的工作機制
問題場景:
1、集群啟動后,可以查看文件,但是上傳文件時報錯,打開web頁面可看到namenode正處于safemode狀態,怎么處理?(safemode是由于當前的namenode和大部分的datanode未建立完全的鏈接<即namenode不清楚有些數據的存儲位置造成的>)
2、Namenode服務器的磁盤故障導致namenode宕機,如何挽救集群及數據?(多種方法:1、早起設置集群時配置HA機制。2、在配置文件hdfs.site中將dfs.namenode.name.dir屬性配置多個目錄,就相當于對namenode數據做了多份備份,這樣做的好處是當其中一個目錄損壞了,也不會影響到Hadoop的元數據,特別是當其中一個目錄是NFS(網絡文件系統Network File System,NFS)之上,即使你這臺機器損壞了,元數據也得到保存。)
3、Namenode是否可以有多個(是,后面問題根據實際情況來具體分析)?namenode內存要配置多大?namenode跟集群數據存儲能力有關系嗎?
4、文件的blocksize究竟調大好還是調小好?
……
諸如此類問題的回答,都需要基于對namenode自身的工作原理的深刻理解。(目前的話個人件建議只需要了解以下的主要內容就行了,后續如果遇到問題再深入了解相關內容)
1. namenode的職責:
負責客戶端請求的響應;
元數據的管理(查詢,修改);
2. 對元數據管理:
namenode對數據的管理采用了三種存儲形式:
A、內存元數據(NameSystem):內存中有一份完整的元數據(內存meta data)。
B、磁盤元數據鏡像文件:磁盤有一個“準完整”的元數據鏡像(fsimage)文件(在namenode的工作目錄中)。
C、數據操作日志文件(可通過日志運算出元數據):用于銜接內存metadata和持久化元數據鏡像fsimage之間的操作日志(edits文件)。
注:當客戶端對hdfs中的文件進行新增或者修改操作,操作記錄首先被記入edits日志文件中,當客戶端操作成功后,相應的元數據會更新到內存meta.data中。
2、DataNode的工作機制
問題場景:
1、集群容量不夠,怎么擴容?
2、如果有一些datanode宕機,該怎么辦?
3、datanode明明已啟動,但是集群中的可用datanode列表中就是沒有,怎么辦?
以上這類問題的解答,有賴于對datanode工作機制的深刻理解(目前的話個人件建議只需要了解以下的主要內容就行了,后續如果遇到問題再深入了解相關內容)
1、Datanode工作職責:
存儲管理用戶的文件塊數據
定期向namenode匯報自身所持有的block信息(通過心跳信息上報)
(這點很重要,因為,當集群中發生某些block副本失效時,集群如何恢復block初始副本數量的問題)
3、Secondary Namenode的Check point機制
了解了以上知識,接下來再來理解元數據的checkpoint機制是怎么一回事的時候就很容易了。
什么叫checkpoint?
每隔一段時間,會由secondary namenode將namenode上積累的所有edits和一個最新的fsimage下載到本地,并加載到內存進行merge(這個過程稱為checkpoint)
checkpoint機制如下圖所示:
- 客戶端發送更新元數據的請求。
- namenode在內存中更新元數據。
- edits記錄更新的操作日志
- namenode滾動當前正在寫的edits。
- 將生成的fsimage和edtis下載到secender namenode.
- 將下載到secender namenode的fsimage和edtis放入內存進行合并。
- 合并更新后的元數據dump成新的image文件
- 然后secender namenode請求namenode是否需要checkpoint
- 如果需要就將edtis正在寫的那條日志進行滾動(即重復4步驟的操作)并將secender namenode生成的新的fsimage上傳到namenode并重命名為fsimage。
checkpoint的附帶作用
namenode和secondary namenode的工作目錄存儲結構完全相同,所以,當namenode故障退出需要重新恢復時,可以從secondary namenode的工作目錄中將fsimage拷貝到namenode的工作目錄,以恢復namenode的元數據。
最后重點陳述下Secondary Namenode與Namenode的HA機制的區別,有許多人認為Secondary Namenode其實就是namenode一個HA機制,其實不是這樣的。Secondary Namenode相當于Namenode的一個熱備份(比如電腦的一鍵還原),只是定期將合并的image文件通過checkpoint機制傳給Namenode,并不具備HA機制中當namenode掛了之后直接接管namenode的能力。更深層來說,HA機制中備份的namenode是對namenode內存、edtis、image的實時的備份,而Secondary Namenode只是對image定時的備份。所以兩者不是同一個東西。