0

我对我们何时广播数据帧有疑问。

广播数据帧的副本被发送到每个 Executor。

那么,Spark 何时从每个 Executor 驱逐这些副本?

4

1 回答 1

0

我发现这个主题在功能上很容易理解,但从技术上讲,这些手册更难理解,而且总会有改进的地方。

我的看法:

  • 每个ContextCleanerSpark 应用程序的驱动程序上都运行着一个。
  • 它在开始时立即开始创建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 官方文档旁边的一个很好的参考。

于 2020-12-31T09:52:29.027 回答