ContextCleaner ——Spark 应用程序的垃圾回收器
ContextCleaner是一个Spark服务,负责在应用程序范围内清除 shuffles, RDDs, broadcasts, accumulators和checkpointed RDDs,目的是减少长时间运行的数据密集型Spark应用程序的内存需求。
ContextCleaner在驱动程序上运行。 它会在SparkContext启动时被创建并立即启动(并且默认情况下spark.cleaner.referenceTracking Spark属性已启用),生命周期:当SparkContext停止时,它停止。
https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/spark-service-contextcleaner.html
开始ContextCleaner — start方法
start(): Unit
start开始清洁线程,并执行一个操作,以System.gc()每个spark.cleaner.periodicGC.interval间隔请求JVM垃圾收集器(使用)。
|
注意
|
请求JVM GC的操作是在periodicGCService执行程序服务上安排的。 |
periodicGCService 单线程执行器服务
periodicGCService是一个内部单线程执行程序服务,名称为context-cleaner-periodic-gc以请求JVM垃圾收集器。
|
注意
|
在每个spark.cleaner.periodicGC.interval间隔内调度对JVM GC的请求。 定期运行在启动时 |
注册ShuffleDependency清理— registerShuffleForCleanup方法
registerShuffleForCleanup(shuffleDependency: ShuffleDependency[_, _, _]): Unit
registerShuffleForCleanup注册ShuffleDependency进行清理。
在内部,registerShuffleForCleanup只需为input 执行registerForCleanupShuffleDependency。
|
注意
|
registerShuffleForCleanup在ShuffleDependency创建时专门使用。 |
注册对象参考以进行清理— registerForCleanup内部方法
registerForCleanup(objectForCleanup: AnyRef, task: CleanupTask): Unit
在内部,registerForCleanup将输入添加objectForCleanup到referenceBuffer内部队列。
|
注意
|
尽管AnyRef输入objectForCleanup的类型最广泛,但该类型实际上CleanupTaskWeakReference是自定义Java的java.lang.ref.WeakReference。 |
从MapOutputTrackerMaster和中删除随机播放块BlockManagerMaster — doCleanupShuffle方法
doCleanupShuffle(shuffleId: Int, blocking: Boolean): Unit
doCleanupShuffle执行洗牌清除,这是从当前MapOutputTrackerMaster和BlockManagerMaster中删除洗牌。doCleanupShuffle还通知CleanerListeners。
在内部,当执行时,您应该在日志中看到以下DEBUG消息:
DEBUG Cleaning shuffle [id]
doCleanupShuffle 注销shuffleId来自的输入MapOutputTrackerMaster。
|
注意
|
doCleanupShuffle用于SparkEnv访问当前MapOutputTracker。 |
doCleanupShuffle shuffleId从中删除输入的混洗块BlockManagerMaster。
|
注意
|
doCleanupShuffle用于SparkEnv访问当前BlockManagerMaster。 |
doCleanupShuffle通知所有注册的CleanerListener侦听器(来自listeners内部队列)输入shuffleId已清除。
最后,您应该在日志中看到以下调试消息:
DEBUG Cleaned shuffle [id]
如果发生任何异常,您应该在日志和异常本身中看到以下错误消息。
ERROR Error cleaning shuffle [id]
|
注意
|
doCleanupShuffle在ContextCleaner清理随机引用和(而有趣的)同时拟合ALSModel(在Spark MLlib中)时执行。 |
设定值
| Spark Property | 默认值 | 描述 |
|---|---|---|
|
|
|
控制触发垃圾回收的频率。 |
|
|
|
控制是否在初始化 a 时 |
|
|
|
控制清洗线程是否应阻止执行清除任务(除了shuffle以外,后者由spark.cleaner.referenceTracking.blocking.shuffle Spark属性控制)。 这是SPARK-3015 |
|
|
|
控制清洗线程是否应在随机清洗任务上阻塞。 清理混洗时,这是ContextCleaner的SPARK-3139 Akka超时的 |
|
|
|
控制如果引用超出范围,是否清理检查点文件。 |
ContextCleaner ——Spark 应用程序的垃圾回收器的更多相关文章
- [Think In Java]基础拾遗1 - 对象初始化、垃圾回收器、继承、组合、代理、接口、抽象类
目录 第一章 对象导论第二章 一切都是对象第三章 操作符第四章 控制执行流程第五章 初始化与清理第六章 访问权限控制第七章 复用类第九章 接口 第一章 对象导论 1. 对象的数据位于何处? 有两种方式 ...
- JVM 垃圾回收器工作原理及使用实例介绍(转载自IBM),直接复制粘贴,需要原文戳链接
原文 https://www.ibm.com/developerworks/cn/java/j-lo-JVMGarbageCollection/ 再插一个关于线程和进程上下文,待判断 http://b ...
- C#.Net GC(garbage Collector) 垃圾回收器
以前一直以为gc的原理很简单,也就是分代处理堆数据,直到我的膝盖中了一箭(好吧 直到有天汪涛和我说他面试携程的面试题 关于服务器和 工作站gc 的区别)其实我当时尚不知道 工作站和服务器有什么区别更不 ...
- Java垃圾回收算法和垃圾回收器
基本上 jvm内存回收有三种 基本算法 标记-清除 标记清除的算法最简单,主要是标记出来需要回收的对象,然后然后把这些对象在内存的信息清除.如何标记需要回收的对象,在上一篇文章里面已经有说明. 标记- ...
- Java GC系列(3):垃圾回收器种类
本文由 ImportNew - 好好先生 翻译自 javapapers. 目录 垃圾回收介绍 垃圾回收是如何工作的? 垃圾回收的类别 垃圾回收监视和分析 在这篇教程中我们将学习几种现有的垃圾回收器.在 ...
- JVM学习总结三——垃圾回收器
整两天再看调优分析的部分,发现实际运行环境下,还是要考虑配置垃圾回收器,所以这里就加一小章介绍一下. 首先来看一下HotSpot所支持回收期的关系图: 图中可以看到一共有7中垃圾回收器,以中间绿线为界 ...
- 面试之C#--垃圾回收器什么时候回收?
每个对象只有在该对象不存在任何引用才会被垃圾回收起回收. 可以调用静态方法System.GC.Collect()垃圾回收器,但是不建议这么做: 用using语句可以有效的自动释放掉资源. 实在没有办法 ...
- 垃圾回收器 Dispose 和 Finalize 的互补作用
假如我们程序有两个窗口 Form1.Form2; 当我们关闭一个窗口的时候,会发出一个 终止响应,并将该窗口对象送入终止队列,公共语言运行库的垃圾回收器跟踪着这个对象的生存期,此时就会调用此对象的基类 ...
- [译]Java垃圾回收器的类型
说明:这篇文章来翻译来自于Javapapers 的Types of Java Garbage Collectors 在这部分的教程中我们将讲到可使用的四种不同类型的Java垃圾回收器.垃圾回收是Jav ...
随机推荐
- "=="和equals小结
通俗点讲,==是看看左右是不是一个东西.equals是看看左右是不是长得一样.如何记住嘛.如果单纯是想记住, ==:等于.equals:相同.两个长得一样的人,只能说长的相同(equals),但是不 ...
- vuetify使用时遇到的坑:默认颜色显示不了
原文链接: https://blog.csdn.net/weixin_44015248/article/details/86579777
- pycharm鼠标更改字体大小
Pycharm快捷键设置(鼠标滚动控制字体大小) 一.pycharm字体放大的设置 File -> setting -> Keymap ->在搜寻框中输入:increase -> ...
- TDOA 之TDOA算法python实现
这里指的TDOA算法,实际是解两个双曲线方程,由于两个二次方程设计东西较多,如果强解,计算量很大,从网上参考了如下链接: 算法推到:https://blog.csdn.net/lpsl1882/art ...
- sysobjects统计数据库的各类结构数据
概要: 查询表.以及表中的行数 SELECT a.name,b.rows FROM sysobjects a INNER JOIN sysindexes b ON a.id=b.id WHERE a. ...
- git致命错误汇总
1. 拒绝合并无关历史 fatal: refusing to merge unrelated histories 解决办法: git pull origin master --allow-unrel ...
- QLocalSocket
QIODevice做为QLocalSocket的父类 在Qt中,提供了多种IPC方法.看起来好像和Socket搭上点边,实则底层是windows的name pipe.这应该是支持双工通信的 QLoca ...
- 【源码拾遗】从vue-router看前端路由的两种实现
本文由浅入深观摩vue-router源码是如何通过hash与History interface两种方式实现前端路由,介绍了相关原理,并对比了两种方式的优缺点与注意事项.最后分析了如何实现可以直接从文件 ...
- linux系列(二):cd命令
1.命令格式: cd [目录名] 2.命令功能: 切换当前目录至目录名目录 3.常用实例 (1).进入系统根目录 命令: cd / 输出: felix@felix-computer:~/软件$ cd ...
- 1827:【01NOIP提高组】Car的旅行路线
哇这些真题终于正经起来奥 刚看这道题很不自信觉得自己肯定不能建图成功甚至想过用贪心.. 后来一想发现建图还是蛮容易的,AI我是真的蠢 话说一本通真的很坑啊,把原题的保留1位改成了2 我把在洛谷AC的代 ...