Spark shuffle介绍:shuffle data生命周期
【摘要】 shuffle data持久化在磁盘上,如果一直不清理,磁盘容易被撑爆。那shuffle data什么时候会被清理呢。一般来说可以分成3种场景:1、spark application主动停止,需要清理该application下所属的全部shuffle data。清理流程如下(本文均以未启用external shuffle service,spark 2.x代码为例):2、applicatio...
shuffle data持久化在磁盘上,如果一直不清理,磁盘容易被撑爆。那shuffle data什么时候会被清理呢。一般来说可以分成3种场景:
1、spark application主动停止,需要清理该application下所属的全部shuffle data。清理流程如下(本文均以未启用external shuffle service,spark 2.x代码为例):
2、application存活,但某个阶段的shuffle data不再需要,可以被删除清理。这里核心是如何判断某个shuffle data不再被需要。spark里是利用java的GC机制来判断某个shuffle是否还需要使用。宽依赖会存在shuffle,在创建ShuffleDependency时会将该对象以弱引用的方式注册在ContextCleaner,然后ContextCleaner周期性检查该弱引用对象是否被GC回收了,如果回收说明该ShuffleDependency对象不再被依赖,即shuffle data不再被需要,可以被清理。为了避免一直未GC导致shuffle不被清理,ContextCleaner也会定期调用system.gc来建议GC。
3、机器异常掉电的情况,application来不及执行主动关闭逻辑进行shuffle清理。这种一般依赖外围的资源管理如yarn的清理机制,或者需要在外围添加周期性检查程序,清理非存活application的所有shuffle数据。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)