spark源码分析-ContextCleaner缓存清理

ContextCleaner是Spark中负责内存管理的关键组件,它通过启动两个线程来定期清理不再使用的RDD、Broadcast、Accumulator和Shuffle数据,避免内存压力。线程包括一个用于清理不再被引用的对象,另一个则定时调用System.gc()。清理机制基于Java的弱引用,当数据对象仅被弱引用关联时,会被自动清理。ContextCleaner使用软引用关联需要清理的数据,确保在内存不足时回收对象,并通过System.gc()建议JVM进行垃圾回收。
摘要由CSDN通过智能技术生成

ContextCleaner是用于清理spark执行过程中内存,主要用于清理任务执行过程中生成的缓存RDD、Broadcast、Accumulator、Shuffle数据,防止造成内存压力。
ContextCleaner会在SparkContext创建过程中,被实例化:

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

调用ContextCleaner的start()方法启动清理器,该类启动两个线程一个用于将清理不被使用的对象,另一个线程定时调用System.gc()方法,来清理JVM内存中不被使用的对象,该方法不会直接触发full gc,它只会建议JVM进行full gc,具体full gc何时进行由JVM自行决定。

/** Start the cleaner. */
  def start(): Unit = {
    cleaningThread.setDaemon(true)
    cleaningThread.setName("Spark Context Cleaner")
    cleaningThread.start()
    periodicGCService.scheduleAtFixedRate(new Runnable {
      override 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值