checkpoint 机制具体实现示例详解

时间:2023-07-07 11:07:21    来源:脚本之家
目录
checkpoint 机制的具体实现BackNode 节点冷备份checkpoint 的实现

checkpoint 机制的具体实现

我们都知道为了优化分布式存储系统中 NameNode 的重启性能,我们引进了 checkpoint 机制和 FsImage 快照,使得 FsImage 和 editslog 共同为系统元数据提供持久化功能。

那么我们今天就来学习一下,checkpoint 机制具体应该要怎么实现??


(相关资料图)

BackNode 节点冷备份

NameNode 的主要工作时维护系统中文件元数据,并实现其持久化;在每执行一个操作之后,NameNode 都要生成一个 editslog,最后刷盘(但是不是每生成一条数据就刷盘一次)。

从这我们可以发现,NameNode 进程,它需要额外分配出来一个线程,后台线程定时的去进行磁盘IO的操作,其实这个是很影响本地 CPU 负载的;另外,假设这时候来了很多操作请求,那么系统中将有大量的线程用来来更新内存的文件目录树,这时候肯定是要加锁的了。此时如果系统还要每隔一段时间,耗费比如说几秒钟,甚至几分钟的时间来对文件目录树进行加锁,读取数据,写入本地磁盘;这样就会导致更新文件目录树,和读取文件目录树写入磁盘,它们之间会产生巨大的锁的冲突。

如果上述所有操作都在 NameNode 上执行的话,就太影响 NameNode 节点的性能了。

为此,我们需要考虑给系统中增加一个角色——BackNode,其实它的功能就有点像 HDFS 中的 SecondaryNameNode。

BackNode 是充当于 NameNode 的一个冷备份的角色,我们可以将 checkpoint 的操作交给其来执行,这样就可以减轻 NameNode 这边的性能消耗了。

checkpoint 的实现

BackNode 在启动的时候会启动一个 checkpoint 的调度任务:

// 调度任务:fsImageCheckpointer
defaultScheduler.schedule("FSImage Checkpoint操作", fsImageCheckpointer,
        backupnodeConfig.getCheckpointInterval(), backupnodeConfig.getCheckpointInterval(), TimeUnit.MILLISECONDS);

这是一个定时任务,每隔一段时间就会被执行一次。

下面我们一起来看看 checkpoint 任务具体需要做些什么?

判断当前系统中的 txid 和上一次 checkpoint 时的是否一致,不一致才继续执行根据当前系统中的数据生成 FsImage处理掉旧的 FsImage

具体代码如下:

/**
 * checkpoint 任务
 */
@Override
public void run() {
    log.info("BackupNode启动checkpoint后台线程.");
    try {
        // 如果是正在恢复元数据,则直接返回
        if (nameSystem.isRecovering()) {
            log.info("正在恢复元数据...");
            return;
        }
        // 当前 maxid 和 之前记录的 maxid 相等
        if (nameSystem.getMaxTxId() == lastCheckpointTxId) {
            log.info("EditLog和上次没有变化,不进行checkpoint: [txId={}]", lastCheckpointTxId);
            return;
        }
        // 以下讨论的情况是:当前 maxid 和 之前记录的 maxid 不相等(大于)
        // 对当前内存中的数据生成快照
        FsImage fsImage = nameSystem.getFsImage();
        // 更新记录中的 maxid
        lastCheckpointTxId = fsImage.getMaxTxId();
        // 路径
        String fsImageFile = backupNodeConfig.getFsImageFile(String.valueOf(System.currentTimeMillis()));
        log.info("开始执行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 机制具体实现示例详解的详细内容,更多关于checkpoint 机制实现的资料请关注脚本之家其它相关文章!

关键词:

文章推荐

  • 深圳大铲湾码头正式投入电动空箱堆高机 碳排放更低

    9月14日,两台电动空箱堆高机在大铲湾码头正式投入使用,以进一步推进减碳工作。记者了解到,此批空箱堆高机采用全电力驱动,也是深圳市各

    深圳商报 2022-09-15
  • 多点突破!联想智慧教育大屏市场份额跻身中国前三

    近日,联想中国区召开第一财季工作总结会称,3S业务获得多点突破,营收占比已接近30%(注:3S指-智能设备、方案服务、智能基础设施)。其中,

    TechWeb.com.cn 2022-08-17
  • 9399元!七彩虹新电竞一体机来了:搭载酷睿H45+RTX3060显卡

    6月17日,DIY硬件大厂七彩虹发布了新的电竞一体机iGame G-ONE Plus。新机换了新模具,搭载英特尔12代酷睿H45处理器和RTX 3060显卡,首发

    爱搞机 2022-06-20
  • 传苹果将继续研发OLED显示屏iPad Pro机型 或为MacBook Air

    日前,有消息称苹果也在继续研发配备OLED显示屏的iPad Pro机型。这款OLED MacBook预计是MacBook Air,但随着我们接近2024年,这可能会发

    DoNews 2022-06-20
  • 广西将三年改造1万条城市背街小巷 打造文化特色精品小巷

      中新网南宁2月6日电 (王凌云 林洁琪)广西住房和城乡建设厅6日介绍,根据近日印发的《广西城市背街小巷整治改造提升三年行动方案(2022

    2022-02-07
  • 广告

    X 关闭

    X 关闭

  • 众测
  • more+

    京张高铁每日开行17对冬奥列车

      京张高铁每日开行17对冬奥列车  预计冬奥服务保障期运送运动员、技术官员、持票观众等20万人次  2月6日,2022北京新闻中心举行“北

    北京冬奥会开幕式上 小学生朱德恩深情演绎《我和我的祖国》

      北京冬奥会开幕式上 小学生朱德恩深情演绎《我和我的祖国》  9岁小号手苦练悬臂吹响颂歌  2月4日晚,在北京冬奥会开幕式上,9岁的

    2022北京冬奥会开幕式这19首乐曲串烧不简单

      多名指挥家列曲目单 再由作曲家重新编曲 本报专访冬奥开幕式音乐总监赵麟  开幕式这19首乐曲串烧不简单  “二十四节气”倒计时、

    “一墩难求” 冰墩墩引爆购买潮

      设计师:没想到冰墩墩成“爆款”  “一墩难求”冰墩墩引爆购买潮 北京冬奥组委:会源源不断供货  北京冬奥会吉祥物“冰墩墩”近日