源代碼分析(三七)
Secondary NameNode的成員變量很少,主要的有:
privateCheckpointStorage checkpointImage;
Secondary NameNode使用的Storage
privateNamenodeProtocol namenode;
和NameNode通信的接口
privateHttpServer infoServer;
傳輸文件用的HTTP服務(wù)器
main方法是Secondary NameNode的入口,它最終啟動(dòng)線程,執(zhí)行SecondaryNameNode的run。啟動(dòng)前的對SecondaryNameNode的構(gòu)造過程也很簡單,主要是創(chuàng)建和NameNode通信的接口和啟動(dòng)HTTP服務(wù)器。
SecondaryNameNode的run方法每隔一段時(shí)間執(zhí)行doCheckpoint(),從NameNode的主要工作都在這一個(gè)方法里。這個(gè)方法,總的來說,會(huì)從NameNode上取下FSImage和日志,然后再本地合并,再上傳回NameNode。這個(gè)過程結(jié)束后,從NameNode上保持了NameNode上持久化信息的一個(gè)備份,同時(shí),NameNode上已經(jīng)完成合并到FSImage的日志可以拋棄,一箭雙雕。
具體的的流程是:
1:調(diào)用startCheckpoint,為接下來的工作準(zhǔn)備空間。startCheckpoint會(huì)在內(nèi)部做一系列的檢查,然后調(diào)用CheckpointStorage的startCheckpoint方法,創(chuàng)建目錄。
2:調(diào)用namenode的rollEditLog方法,開始一次新的檢查點(diǎn)過程。調(diào)用會(huì)返回一個(gè)CheckpointSignature(檢查點(diǎn)簽名),在上傳合并完的FSImage時(shí),會(huì)使用這個(gè)簽名。
Namenode的rollEditLog方法最終調(diào)用的是FSImage的同名方法,前面提到過這個(gè)方法,作用是關(guān)閉往edits上寫的日志,打開日志到edits.new。明顯,在Secondary NameNode下載fsimage和日志的時(shí)候,對命名空間的修改,將保持在edits.new的日志中。
注意,如果FSImage這個(gè)時(shí)候的狀態(tài)(看下面的狀態(tài)機(jī),前面出現(xiàn)過一次)不是出于CheckpointStates.ROLLED_EDITS,將拋異常結(jié)束這個(gè)過程。
3:通過downloadCheckpointFiles下載fsimage和日志,并設(shè)置本地檢查點(diǎn)狀態(tài)為CheckpointStates.UPLOAD_DONE。
4:合并日志的內(nèi)容到fsimage中。過程很簡單,CheckpointStorage利用繼承自FSImage的loadFSImage加載fsimage,loadFSEdits應(yīng)用日志,然后通過saveFSImage保存。很明顯,現(xiàn)在保存在硬盤上的fsimage是合并日志的內(nèi)容以后的文件。
5:使用putFSImage上傳合并日志后的fsimage(讓NameNode通過HTTP到從NameNode取文件)。這個(gè)過程中,NameNode會(huì):
調(diào)用NameNode的FSImage.validateCheckpointUpload,檢查現(xiàn)在的狀態(tài);
利用HTTP,從Secondary NameNode獲取新的fsimage;
更新結(jié)束后設(shè)置新狀態(tài)。
6:調(diào)用NameNode的rollFsImage,最終調(diào)用FSImage的rollFsImage方法,前面我們已經(jīng)分析過了。
7:調(diào)用本地endCheckpoint方法,結(jié)束一次doCheckpoint流程。
其實(shí)前面在分析FSImage的時(shí)候,我們在不了解SecondaryNameNode的情況下,分析了很多和Checkpoint相關(guān)的方法,現(xiàn)在我們終于可以有一個(gè)比較統(tǒng)一的了解了,下面給出NameNode和Secondary NameNode的存儲(chǔ)系統(tǒng)在這個(gè)流程中的狀態(tài)轉(zhuǎn)移圖,方便大家理解。
圖中右側(cè)的狀態(tài)轉(zhuǎn)移圖:
文件系統(tǒng)上的目錄的變化(三六中出現(xiàn)):
免責(zé)聲明:以上內(nèi)容源自網(wǎng)絡(luò),版權(quán)歸原作者所有,如有侵犯您的原創(chuàng)版權(quán)請告知,我們將盡快刪除相關(guān)內(nèi)容。