如何解决Spark 何时从 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 官方文档旁边的一个很好的参考。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。