我对我们何时广播数据帧有疑问。
广播数据帧的副本被发送到每个 Executor。
那么,Spark 何时从每个 Executor 驱逐这些副本?
我对我们何时广播数据帧有疑问。
广播数据帧的副本被发送到每个 Executor。
那么,Spark 何时从每个 Executor 驱逐这些副本?
我发现这个主题在功能上很容易理解,但从技术上讲,这些手册更难理解,而且总会有改进的地方。
我的看法:
- 每个
ContextCleaner
Spark 应用程序的驱动程序上都运行着一个。- 它在开始时立即开始创建
SparkContext
。- 它更多地是关于 Spark 中的各种对象。
- 该线程使用始终从此类运行的方法
ContextCleaner
清理 RDD、shuffle 和广播状态、累加器。keepCleaning
它决定哪些对象由于不再被引用而需要驱逐,并将这些对象放在一个列表中。它调用各种方法,例如registerShuffleForCleanup
. 也就是说,检查是否没有alive root
指向给定对象的对象;如果是这样,那么该对象就有资格进行清理、驱逐。context-cleaner-periodic-gc
异步请求标准 JVM 垃圾收集器。它的周期性运行在启动时ContextCleaner
开始,在终止时ContextCleaner
停止。- Spark 使用标准的 Java GC。
这个https://mallikarjuna_g.gitbooks.io/spark/content/spark-service-contextcleaner.html是 Spark 官方文档旁边的一个很好的参考。