精品欧美无遮挡一区二区三区在线观看,中文字幕一区二区日韩欧美,久久久久国色αv免费观看,亚洲熟女乱综合一区二区三区

        ? 首頁 ? 百科知識(shí) ?源代碼分析(三七)

        源代碼分析(三七)

        時(shí)間:2023-09-22 百科知識(shí) 版權(quán)反饋
        【摘要】:啟動(dòng)前的對SecondaryNameNode的構(gòu)造過程也很簡單,主要是創(chuàng)建和NameNode通信的接口和啟動(dòng)HTTP服務(wù)器。這個(gè)過程結(jié)束后,從NameNode上保持了NameNode上持久化信息的一個(gè)備份,同時(shí),NameNode上已經(jīng)完成合并到FSImage的日志可以拋棄,一箭雙雕。這個(gè)過程中,NameNode會(huì):調(diào)用NameNode的FSImage.validateCheckpointUpload,檢查現(xiàn)在的狀態(tài); 利用HTTP,從Secondary NameNode獲取新的fsimage; 更新結(jié)束后設(shè)置新狀態(tài)。

        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)移圖,方便大家理解。


        mhtml:file://I:\技術(shù)文章下載\2010-4-23整理到notebook\Hadoop匯總2010-4-22\Hadoop源碼分析\Hadoop源代碼分析(三七)%20-%20-%20JavaEye技術(shù)網(wǎng)站.mht!http://caibinbupt.javaeye.com/upload/attachment/67901/27ce4a88-477a-3fb6-a7eb-282f35734375.jpg
         

        圖中右側(cè)的狀態(tài)轉(zhuǎn)移圖:


        mhtml:file://I:\技術(shù)文章下載\2010-4-23整理到notebook\Hadoop匯總2010-4-22\Hadoop源碼分析\Hadoop源代碼分析(三七)%20-%20-%20JavaEye技術(shù)網(wǎng)站.mht!http://caibinbupt.javaeye.com/upload/attachment/67900/d7304108-0811-34b1-902a-7aba5ea397ca.jpg
         

        文件系統(tǒng)上的目錄的變化(三六中出現(xiàn)):

        mhtml:file://I:\技術(shù)文章下載\2010-4-23整理到notebook\Hadoop匯總2010-4-22\Hadoop源碼分析\Hadoop源代碼分析(三七)%20-%20-%20JavaEye技術(shù)網(wǎng)站.mht!http://www.javaeye.com/upload/attachment/65344/9f305133-23c6-3423-9b22-6f32f81ee06a.jpg


        免責(zé)聲明:以上內(nèi)容源自網(wǎng)絡(luò),版權(quán)歸原作者所有,如有侵犯您的原創(chuàng)版權(quán)請告知,我們將盡快刪除相關(guān)內(nèi)容。

        我要反饋