Spark2.1.0——ContextCleaner的工作原理分析

本文深入剖析了SparkContext中的ContextCleaner组件,阐述其在Spark应用中的作用,包括清理RDD、Shuffle状态、元数据、Broadcast对象和Checkpoint数据。介绍了ContextCleaner的创建过程,组件组成如referenceQueue、referenceBuffer、cleaningThread、periodicGCService,以及如何通过配置属性控制其行为。此外,还详细解析了ContextCleaner的启动步骤及工作原理,包括定时执行的GC操作和监听器模式的应用。
摘要由CSDN通过智能技术生成

ContextCleaner是SparkContext中的组件之一。ContextCleaner用于清理那些超出应用范围的RDD、Shuffle对应的map任务状态、Shuffle元数据、Broadcast对象以及RDD的Checkpoint数据。

创建ContextCleaner

创建ContextCleaner的代码如下。

    _cleaner =
      if (_conf.getBoolean("spark.cleaner.referenceTracking", true)) {
        Some(new ContextCleaner(this))
      } else {
        None
      }
    _cleaner.foreach(_.start())

根据上述代码,我们知道可以通过配置属性spark.cleaner.referenceTracking(默认是true)来决定是否启用ContextCleaner

ContextCleaner的组成如下:

  • referenceQueue:缓存顶级的AnyRef引用;
  • referenceBuffer:缓存AnyRef的虚引用;
  • listeners:缓存清理工作的监听器数组;
  • cleaningThread:用于具体清理工作的线程。此线程为守护线程,名称为Spark Context C
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值