最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

checkpoint 機制具體實現(xiàn)示例詳解

 更新時間:2023年02月07日 15:54:26   作者:點滴星光  
這篇文章主要為大家介紹了checkpoint 機制具體實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

checkpoint 機制的具體實現(xiàn)

我們都知道為了優(yōu)化分布式存儲系統(tǒng)中 NameNode 的重啟性能,我們引進了 checkpoint 機制和 FsImage 快照,使得 FsImage 和 editslog 共同為系統(tǒng)元數(shù)據(jù)提供持久化功能。

那么我們今天就來學習一下,checkpoint 機制具體應該要怎么實現(xiàn)??

BackNode 節(jié)點冷備份

NameNode 的主要工作時維護系統(tǒng)中文件元數(shù)據(jù),并實現(xiàn)其持久化;在每執(zhí)行一個操作之后,NameNode 都要生成一個 editslog,最后刷盤(但是不是每生成一條數(shù)據(jù)就刷盤一次)。

從這我們可以發(fā)現(xiàn),NameNode 進程,它需要額外分配出來一個線程,后臺線程定時的去進行磁盤IO的操作,其實這個是很影響本地 CPU 負載的;另外,假設這時候來了很多操作請求,那么系統(tǒng)中將有大量的線程用來來更新內(nèi)存的文件目錄樹,這時候肯定是要加鎖的了。此時如果系統(tǒng)還要每隔一段時間,耗費比如說幾秒鐘,甚至幾分鐘的時間來對文件目錄樹進行加鎖,讀取數(shù)據(jù),寫入本地磁盤;這樣就會導致更新文件目錄樹,和讀取文件目錄樹寫入磁盤,它們之間會產(chǎn)生巨大的鎖的沖突。

如果上述所有操作都在 NameNode 上執(zhí)行的話,就太影響 NameNode 節(jié)點的性能了。

為此,我們需要考慮給系統(tǒng)中增加一個角色——BackNode,其實它的功能就有點像 HDFS 中的 SecondaryNameNode。

BackNode 是充當于 NameNode 的一個冷備份的角色,我們可以將 checkpoint 的操作交給其來執(zhí)行,這樣就可以減輕 NameNode 這邊的性能消耗了。

checkpoint 的實現(xiàn)

BackNode 在啟動的時候會啟動一個 checkpoint 的調(diào)度任務:

// 調(diào)度任務:fsImageCheckpointer
defaultScheduler.schedule("FSImage Checkpoint操作", fsImageCheckpointer,
        backupnodeConfig.getCheckpointInterval(), backupnodeConfig.getCheckpointInterval(), TimeUnit.MILLISECONDS);

這是一個定時任務,每隔一段時間就會被執(zhí)行一次。

下面我們一起來看看 checkpoint 任務具體需要做些什么?

  • 判斷當前系統(tǒng)中的 txid 和上一次 checkpoint 時的是否一致,不一致才繼續(xù)執(zhí)行
  • 根據(jù)當前系統(tǒng)中的數(shù)據(jù)生成 FsImage
  • 處理掉舊的 FsImage

具體代碼如下:

/**
 * checkpoint 任務
 */
@Override
public void run() {
    log.info("BackupNode啟動checkpoint后臺線程.");
    try {
        // 如果是正在恢復元數(shù)據(jù),則直接返回
        if (nameSystem.isRecovering()) {
            log.info("正在恢復元數(shù)據(jù)...");
            return;
        }
        // 當前 maxid 和 之前記錄的 maxid 相等
        if (nameSystem.getMaxTxId() == lastCheckpointTxId) {
            log.info("EditLog和上次沒有變化,不進行checkpoint: [txId={}]", lastCheckpointTxId);
            return;
        }
        // 以下討論的情況是:當前 maxid 和 之前記錄的 maxid 不相等(大于)
        // 對當前內(nèi)存中的數(shù)據(jù)生成快照
        FsImage fsImage = nameSystem.getFsImage();
        // 更新記錄中的 maxid
        lastCheckpointTxId = fsImage.getMaxTxId();
        // 路徑
        String fsImageFile = backupNodeConfig.getFsImageFile(String.valueOf(System.currentTimeMillis()));
        log.info("開始執(zhí)行checkpoint操作: [maxTxId={}]", fsImage.getMaxTxId());
        // 寫入FsImage文件
        doCheckpoint(fsImage, fsImageFile);
        // 上傳 FsImage 給 NameNode
        uploadFsImage(fsImageFile);
        // 刪除舊的FSImage
        namenodeClient.getDefaultScheduler().scheduleOnce("刪除FSImage任務", fsImageClearTask, 0);
    } catch (Exception e) {
        log.error("FSImageCheckPointer error:", e);
    }
}

以上就是checkpoint 機制具體實現(xiàn)示例詳解的詳細內(nèi)容,更多關于checkpoint 機制實現(xiàn)的資料請關注腳本之家其它相關文章!

相關文章

  • Java分形繪制山脈模型

    Java分形繪制山脈模型

    這篇文章主要為大家詳細介紹了Java分形繪制山脈模型,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 學習Java內(nèi)存模型JMM心得

    學習Java內(nèi)存模型JMM心得

    這篇文章主要介紹了學習Java內(nèi)存模型JMM的心得以及對其原理做了深入的介紹,有興趣的朋友學習下吧。
    2017-12-12
  • SpringBoot項目中訪問HTML頁面的實現(xiàn)示例

    SpringBoot項目中訪問HTML頁面的實現(xiàn)示例

    本文主要介紹了SpringBoot項目中訪問HTML頁面的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-08-08
  • Java常見基礎數(shù)據(jù)結構

    Java常見基礎數(shù)據(jù)結構

    這篇文章主要介紹了Java常見數(shù)據(jù)結構面試題,帶有答案及解釋,希望對廣大的程序愛好者有所幫助,同時祝大家有一個好成績,需要的朋友可以參考下,希望可以幫助到你
    2021-07-07
  • Spring Boot中整合PageHelper實現(xiàn)分頁功能詳細步驟

    Spring Boot中整合PageHelper實現(xiàn)分頁功能詳細步驟

    在Spring Boot項目中整合PageHelper并實現(xiàn)分頁查詢功能的全部步驟,通過以上配置和代碼,我們可以輕松地實現(xiàn)數(shù)據(jù)庫分頁查詢,提高了開發(fā)效率并改善了用戶體驗,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • java模擬實現(xiàn)銀行ATM機操作

    java模擬實現(xiàn)銀行ATM機操作

    這篇文章主要為大家詳細介紹了java模擬實現(xiàn)銀行ATM機操作,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • java8列表中通過stream流根據(jù)對象屬性去重的三種方式

    java8列表中通過stream流根據(jù)對象屬性去重的三種方式

    這篇文章主要介紹了java8列表中通過stream流根據(jù)對象屬性去重的三種方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • springboot多租戶設計過程圖解

    springboot多租戶設計過程圖解

    這篇文章主要介紹了springboot多租戶設計過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • 淺析Java中的Caffeine緩存源碼

    淺析Java中的Caffeine緩存源碼

    這篇文章主要介紹了淺析Java中的Caffeine緩存源碼,Caffeine是一個Java開發(fā)的高性能緩存庫,它提供了一種簡單而強大的方式來管理內(nèi)存中的緩存數(shù)據(jù),Caffeine的設計目標是提供快速、高效的緩存訪問,同時保持簡單易用的API,本文針對其部分源碼做出解析,需要的朋友可以參考下
    2023-10-10
  • Java Swing中JTable渲染器與編輯器用法示例

    Java Swing中JTable渲染器與編輯器用法示例

    這篇文章主要介紹了Java Swing中JTable渲染器與編輯器用法,結合實例形式較為詳細的分析了Swing中JTable渲染器與編輯器的功能、使用方法及相關注意事項,需要的朋友可以參考下
    2017-11-11

最新評論

阳高县| 阳春市| 云安县| 巫溪县| 阳信县| 双鸭山市| 泗洪县| 岑巩县| 济阳县| 应用必备| 綦江县| 宁都县| 柞水县| 玉山县| 夏河县| 常山县| 内乡县| 咸阳市| 鄂尔多斯市| 葫芦岛市| 潮州市| 桂林市| 冕宁县| 昭觉县| 普洱| 延寿县| 靖远县| 集安市| 扬州市| 义马市| 韶关市| 区。| 彰化县| 邯郸市| 手机| 武川县| 涿州市| 子长县| 庆云县| 金坛市| 乌海市|