考虑到内存有限,我感觉火花会自动从每个节点中删除RDD.我想知道这个时间是可配置的吗?spark如何决定何时从内存中驱逐RDD
注意:我不是在谈论 rdd.cache()
我想知道这个时间是可配置的吗?spark如何决定何时从内存中驱逐RDD
An RDD就像任何其他对象一样.如果你不持久/缓存它,它将作为托管语言下的任何其他对象,并且一旦没有指向它的活动根对象就被收集.
@Jacek指出的"如何"部分是一个被称为对象的责任ContextCleaner.主要是,如果您需要详细信息,这就是清洁方法的样子:
private def keepCleaning(): Unit = Utils.tryOrStopSparkContext(sc) {
while (!stopped) {
try {
val reference = Option(referenceQueue.remove(ContextCleaner.REF_QUEUE_POLL_TIMEOUT))
.map(_.asInstanceOf[CleanupTaskWeakReference])
// Synchronize here to avoid being interrupted on stop()
synchronized {
reference.foreach { ref =>
logDebug("Got cleaning task " + ref.task)
referenceBuffer.remove(ref)
ref.task match {
case CleanRDD(rddId) =>
doCleanupRDD(rddId, blocking = blockOnCleanupTasks)
case CleanShuffle(shuffleId) =>
doCleanupShuffle(shuffleId, blocking = blockOnShuffleCleanupTasks)
case CleanBroadcast(broadcastId) =>
doCleanupBroadcast(broadcastId, blocking = blockOnCleanupTasks)
case CleanAccum(accId) =>
doCleanupAccum(accId, blocking = blockOnCleanupTasks)
case CleanCheckpoint(rddId) =>
doCleanCheckpoint(rddId)
}
}
}
} catch {
case ie: InterruptedException if stopped => // ignore
case e: Exception => logError("Error in cleaning thread", e)
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果你想学习移动,我建议浏览Sparks源码甚至更好,阅读@Jacek一书名为"掌握Apache Spark"(这指向一个解释ContextCleaner)
通常,这就是尤瓦尔·伊茨恰科夫(Yuval Itzchakov)写下 “就像其他任何物体一样”的方式,但是...(总是有“但是”,不是吗?)
在Spark中,这不是很明显,因为我们有shuffle块(在Spark管理的其他块中)。它们由在执行程序上运行的BlockManagers管理。从内存中清除驱动程序上的对象时,必须以某种方式通知他们,对吗?
那就是ContextCleaner上台的地方。它是Spark应用程序的垃圾收集器,负责在应用程序范围内清理随机播放,RDD,广播,累加器和检查点的RDD,旨在减少长时间运行的数据繁重的Spark应用程序的内存需求。
ContextCleaner在驱动程序上运行。它会创建并在启动时立即SparkContext启动(并且spark.cleaner.referenceTracking启用了Spark属性,默认情况下为启用状态)。停止时SparkContext停止。
您可以使用jconsole或进行Spark应用程序中所有线程的转储来查看其工作情况jstack。ContextCleaner使用守护程序Spark Context Cleaner线程来清理RDD,随机播放和广播状态。
您还可以通过启用INFO或DEBUG记录org.apache.spark.ContextCleaner记录器级别来查看其工作。只需将以下行添加到conf/log4j.properties:
log4j.logger.org.apache.spark.ContextCleaner=DEBUG
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2687 次 |
| 最近记录: |