欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

checkpoint 機(jī)制的具體實(shí)現(xiàn)

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

那么我們今天就來(lái)學(xué)習(xí)一下,checkpoint 機(jī)制具體應(yīng)該要怎么實(shí)現(xiàn)??

BackNode 節(jié)點(diǎn)冷備份

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

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

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

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

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

checkpoint 的實(shí)現(xiàn)

BackNode 在啟動(dòng)的時(shí)候會(huì)啟動(dòng)一個(gè) checkpoint 的調(diào)度任務(wù):

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

這是一個(gè)定時(shí)任務(wù),每隔一段時(shí)間就會(huì)被執(zhí)行一次。

下面我們一起來(lái)看看 checkpoint 任務(wù)具體需要做些什么?

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

具體代碼如下:

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

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

相關(guān)文章

  • 在Mybatis中association標(biāo)簽多層嵌套的問(wèn)題

    在Mybatis中association標(biāo)簽多層嵌套的問(wèn)題

    這篇文章主要介紹了在Mybatis中association標(biāo)簽多層嵌套的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 創(chuàng)建SpringBoot工程并集成Mybatis的方法

    創(chuàng)建SpringBoot工程并集成Mybatis的方法

    這篇文章主要介紹了創(chuàng)建SpringBoot工程并集成Mybatis,需要的朋友可以參考下
    2018-06-06
  • mybatis通過(guò)if語(yǔ)句實(shí)現(xiàn)增刪改查操作

    mybatis通過(guò)if語(yǔ)句實(shí)現(xiàn)增刪改查操作

    這篇文章主要介紹了mybatis通過(guò)if語(yǔ)句實(shí)現(xiàn)增刪改查操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • springboot 設(shè)置server.port不生效的原因及解決

    springboot 設(shè)置server.port不生效的原因及解決

    這篇文章主要介紹了springboot 設(shè)置server.port不生效的原因及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • springmvc直接不經(jīng)過(guò)controller訪問(wèn)WEB-INF中的頁(yè)面問(wèn)題

    springmvc直接不經(jīng)過(guò)controller訪問(wèn)WEB-INF中的頁(yè)面問(wèn)題

    這篇文章主要介紹了springmvc直接不經(jīng)過(guò)controller訪問(wèn)WEB-INF中的頁(yè)面問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 詳解JavaScript中的函數(shù)聲明和函數(shù)表達(dá)式

    詳解JavaScript中的函數(shù)聲明和函數(shù)表達(dá)式

    這篇文章主要介紹了詳解JavaScript中的函數(shù)聲明和函數(shù)表達(dá)式,是JS入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-08-08
  • Java深入淺出數(shù)組的定義與使用上篇

    Java深入淺出數(shù)組的定義與使用上篇

    數(shù)組是有序的元素序列,若將有限個(gè)類型相同的變量的集合命名,那么這個(gè)名稱為數(shù)組名。組成數(shù)組的各個(gè)變量稱為數(shù)組的分量,也稱為數(shù)組的元素,有時(shí)也稱為下標(biāo)變量。數(shù)組是在程序設(shè)計(jì)中,為了處理方便, 把具有相同類型的若干元素按有序的形式組織起來(lái)的一種形式
    2022-03-03
  • springboot中server.ssl.key-store配置路徑的問(wèn)題小結(jié)

    springboot中server.ssl.key-store配置路徑的問(wèn)題小結(jié)

    這篇文章主要介紹了springboot中server.ssl.key-store配置路徑的問(wèn)題,文中還記錄了Spring Boot SSL(https)實(shí)例,介紹在web程序中使用自簽名的SSL(HTTPS)證書(shū)及創(chuàng)建SSL認(rèn)證,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • 深入淺析JSON在java中的使用

    深入淺析JSON在java中的使用

    這篇文章主要介紹了JSON在java中的使用,包括javaBean和json的互轉(zhuǎn),List 和 json 的互轉(zhuǎn)及map 和 json 的互轉(zhuǎn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-04-04
  • idea快速找到項(xiàng)目中對(duì)應(yīng)的類圖文詳解(包括源碼)

    idea快速找到項(xiàng)目中對(duì)應(yīng)的類圖文詳解(包括源碼)

    用IDEA開(kāi)發(fā)Java項(xiàng)目時(shí)經(jīng)常會(huì)使用到各種快捷鍵,其中搜索是最常用的之一,下面這篇文章主要給大家介紹了關(guān)于idea如何快速找到項(xiàng)目中對(duì)應(yīng)的類(包括源碼)的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06

最新評(píng)論